二进制序列化API

简介

Godot has a simple serialization API based on Variant. It’s used for converting data types to an array of bytes efficiently. This API is used in the functions get_var and store_var of File as well as the packet APIs for PacketPeer. This format is not used for binary scenes and resources.

包规范

The packet is designed to be always padded to 4 bytes. All values are little-endian-encoded. All packets have a 4-byte header representing an integer, specifying the type of data:

类型
0null
1bool
2integer
3float
4字符串
5vector2
6rect2
7vector3
8transform2d
9plane
10quat
11aabb
12basis
13transform
14color
15node path
16rid
17object
18dictionary
19array
20raw array
21int array
22real array
23string array
24vector2 array
25vector3 array
26color array
27max

Following this is the actual packet contents, which varies for each type of packet. Note that this assumes Godot is compiled with single-precision floats, which is the default. If Godot was compiled with double-precision floats, the length of “Float” fields within data structures should be 8, and the offset should be (offset - 4) * 2 + 4. The “float” type itself always uses double precision.

0: null

1: bool

偏移量长度类型描述
44Integer0 代表 False, 1 代表 True

2: int

偏移量长度类型描述
48Integer64-bit signed integer

3: float

偏移量长度类型描述
44FloatIEE 754格式的32位浮点数

4: String

偏移量长度类型描述
44IntegerString length (in bytes)
8XBytesUTF-8 encoded string

该字段会被填充成4个字节。

5: Vector2

偏移量长度类型描述
44FloatX coordinate
84FloatY coordinate

6: Rect2

偏移量长度类型描述
44FloatX coordinate
84FloatY coordinate
124FloatX size
164FloatY size

7: Vector3

偏移量长度类型描述
44FloatX coordinate
84FloatY coordinate
124FloatZ coordinate

8: Transform2D

偏移量长度类型描述
44FloatX列向量的X分量,可通过[0][0]访问
84FloatX列向量的Y分量,可通过[0][1]访问
124FloatY列向量的X分量,可通过[1][0]访问
164FloatY列向量的Y分量,可通过[1][1]访问
204Float原始向量的X分量,可通过[2] [0]访问
244Float原始向量的Y分量,可通过[2][1]访问

9: Plane

偏移量长度类型描述
44Float法线 X
84Float法线 Y
124Float法线 Z
164Float距离

10: Quat

偏移量长度类型描述
44Float虚数X
84Float虚数Y
124Float虚数Z
164Float实数W

11: AABB

偏移量长度类型描述
44FloatX coordinate
84FloatY coordinate
124FloatZ coordinate
164FloatX size
204FloatY size
244FloatZ size

12: Basis

偏移量长度类型描述
44FloatX列向量的X分量,可通过[0][0]访问
84FloatX列向量的Y分量,可通过[0][1]访问
124FloatX列向量的Z分量,可通过[0][2]访问
164FloatY列向量的X分量,可通过[1][0]访问
204FloatY列向量的Y分量,可通过[1][1]访问
244FloatY列向量的Z分量,可通过[1][2]访问
284FloatZ列向量的X分量,可通过[2][0]访问
324FloatZ列向量的Y分量,可通过[2][1]访问
364FloatZ列向量的Z分量,可通过[2][2]访问

13: Transform

偏移量长度类型描述
44FloatX列向量的X分量,可通过[0][0]访问
84FloatX列向量的Y分量,可通过[0][1]访问
124FloatX列向量的Z分量,可通过[0][2]访问
164FloatY列向量的X分量,可通过[1][0]访问
204FloatY列向量的Y分量,可通过[1][1]访问
244FloatY列向量的Z分量,可通过[1][2]访问
284FloatZ列向量的X分量,可通过[2][0]访问
324FloatZ列向量的Y分量,可通过[2][1]访问
364FloatZ列向量的Z分量,可通过[2][2]访问
404Float原始向量的X分量,可通过[3][0]访问
444Float原点向量的Y分量,可通过[3][1]访问
484Float原点向量的Z分量,可通过[3][2]访问

14: Color

偏移量长度类型描述
44FloatRed (typically 0..1, can be above 1 for overbright colors)
84FloatGreen (typically 0..1, can be above 1 for overbright colors)
124FloatBlue (typically 0..1, can be above 1 for overbright colors)
164Float透明通道 (0..1)

15: NodePath

偏移量长度类型描述
44IntegerString length, or new format (val&0x80000000!=0 and NameCount=val&0x7FFFFFFF)

对于旧格式:

偏移量长度类型描述
8XBytesUTF-8 encoded string

填充到4个字节。

对于新格式:

偏移量长度类型描述
44IntegerSub-name count
84Integer标志 (absolute: val&1 != 0 )

对于每个名称和子名称

偏移量长度类型描述
X+04IntegerString length
X+4XBytesUTF-8 encoded string

每个名称字符串都会填充到4个字节。

16: RID (暂不支持)

17: Object (暂不支持)

18: Dictionary

偏移量长度类型描述
44Integerval&0x7FFFFFFF = elements, val&0x80000000 = shared (bool)

然后,对于``elements``的数量,使用相同的格式,一个接一个地使用密钥和值对。

19: Array

偏移量长度类型描述
44Integerval&0x7FFFFFFF = elements, val&0x80000000 = shared (bool)

然后,对于``elements``的数量,使用相同的格式一个接一个地输出值。

20: PoolByteArray

偏移量长度类型描述
44IntegerArray length (Bytes)
8..8+长度1Byte字节 (0..255)

数组数据填充为4个字节。

21: PoolIntArray

偏移量长度类型描述
44IntegerArray length (Integers)
8..8+长度*44Integer32-bit signed integer

22: PoolRealArray

偏移量长度类型描述
44IntegerArray length (Floats)
8..8+长度*44Integer32-bits IEEE 754 float

23: PoolStringArray

偏移量长度类型描述
44IntegerArray length (Strings)

对于每个字符串:

偏移量长度类型描述
X+04IntegerString length
X+4XBytesUTF-8 encoded string

每个字符串填充为4个字节。

24: PoolVector2Array

偏移量长度类型描述
44IntegerArray length
8..8+长度84FloatX coordinate
8..12+长度84FloatY coordinate

25: PoolVector3Array

偏移量长度类型描述
44IntegerArray length
8..8+长度124FloatX coordinate
8..12+长度124FloatY coordinate
8..16+长度*124FloatZ coordinate

26: PoolColorArray

偏移量长度类型描述
44IntegerArray length
8..8+长度164FloatRed (typically 0..1, can be above 1 for overbright colors)
8..12+长度164FloatGreen (typically 0..1, can be above 1 for overbright colors)
8..16+长度164FloatBlue (typically 0..1, can be above 1 for overbright colors)
8..20+长度164Float透明通道 (0..1)