Binary serialization 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.

Packet specification

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:

Тип

Значення

0

null

1

bool

2

integer

3

float

4

текст

5

Вектор

6

rect2

7

Вектор

8

transform2d

9

plane

10

quat

11

aabb

12

basis

13

transform

14

color

15

node path

16

rid

17

object

18

dictionary

19

array

20

raw array

21

int array

22

real array

23

string array

24

vector2 array

25

vector3 array

26

color array

27

макс.

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

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

0 for False, 1 for True

2: int

Зміщення

<title>LEN</title>

Тип

Опис

4

8

Integer (ціле)

64-bit signed integer

3: float

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

IEE 754 32-Bits Float

4: String

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

String length (in bytes)

8

X

Байтів

UTF-8 encoded string

This field is padded to 4 bytes.

5: Vector2

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

X coordinate

8

4

Float

Y coordinate

6: Rect2

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

X coordinate

8

4

Float

Y coordinate

12

4

Float

X size

16

4

Float

Y size

7: Vector3

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

X coordinate

8

4

Float

Y coordinate

12

4

Float

Z coordinate

8: Transform2D

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

The X component of the X column vector, accessed via [0][0]

8

4

Float

The Y component of the X column vector, accessed via [0][1]

12

4

Float

The X component of the Y column vector, accessed via [1][0]

16

4

Float

The Y component of the Y column vector, accessed via [1][1]

20

4

Float

The X component of the origin vector, accessed via [2][0]

24

4

Float

The Y component of the origin vector, accessed via [2][1]

9: Plane

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

Звичайний (1024x768)

8

4

Float

Normal Y

12

4

Float

Normal Z

16

4

Float

Відстань

10: Quat

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

Imaginary X

8

4

Float

Imaginary Y

12

4

Float

Imaginary Z

16

4

Float

Real W

11: AABB

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

X coordinate

8

4

Float

Y coordinate

12

4

Float

Z coordinate

16

4

Float

X size

20

4

Float

Y size

24

4

Float

Z size

12: Basis

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

The X component of the X column vector, accessed via [0][0]

8

4

Float

The Y component of the X column vector, accessed via [0][1]

12

4

Float

The Z component of the X column vector, accessed via [0][2]

16

4

Float

The X component of the Y column vector, accessed via [1][0]

20

4

Float

The Y component of the Y column vector, accessed via [1][1]

24

4

Float

The Z component of the Y column vector, accessed via [1][2]

28

4

Float

The X component of the Z column vector, accessed via [2][0]

32

4

Float

The Y component of the Z column vector, accessed via [2][1]

36

4

Float

The Z component of the Z column vector, accessed via [2][2]

13: Transform

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

The X component of the X column vector, accessed via [0][0]

8

4

Float

The Y component of the X column vector, accessed via [0][1]

12

4

Float

The Z component of the X column vector, accessed via [0][2]

16

4

Float

The X component of the Y column vector, accessed via [1][0]

20

4

Float

The Y component of the Y column vector, accessed via [1][1]

24

4

Float

The Z component of the Y column vector, accessed via [1][2]

28

4

Float

The X component of the Z column vector, accessed via [2][0]

32

4

Float

The Y component of the Z column vector, accessed via [2][1]

36

4

Float

The Z component of the Z column vector, accessed via [2][2]

40

4

Float

The X component of the origin vector, accessed via [3][0]

44

4

Float

The Y component of the origin vector, accessed via [3][1]

48

4

Float

The Z component of the origin vector, accessed via [3][2]

14: Color

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Float

Red (typically 0..1, can be above 1 for overbright colors)

8

4

Float

Green (typically 0..1, can be above 1 for overbright colors)

12

4

Float

Blue (typically 0..1, can be above 1 for overbright colors)

16

4

Float

альфа

15: NodePath

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

String length, or new format (val&0x80000000!=0 and NameCount=val&0x7FFFFFFF)

For old format:

Зміщення

<title>LEN</title>

Тип

Опис

8

X

Байтів

UTF-8 encoded string

Padded to 4 bytes.

For new format:

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

Sub-name count

8

4

Integer (ціле)

Flags (absolute: val&1 != 0 )

For each Name and Sub-Name

Зміщення

<title>LEN</title>

Тип

Опис

X+0

4

Integer (ціле)

String length

X+4

X

Байтів

UTF-8 encoded string

Every name string is padded to 4 bytes.

16: RID (unsupported)

17: Object (unsupported)

18: Dictionary

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool)

Then what follows is, for amount of "elements", pairs of key and value, one after the other, using this same format.

19: Array

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool)

Then what follows is, for amount of "elements", values one after the other, using this same format.

20: PoolByteArray

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

Array length (Bytes)

Довжина

1

Байт

Байт

The array data is padded to 4 bytes.

21: PoolIntArray

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

Array length (Integers)

Довжина

4

Integer (ціле)

32-bit signed integer

22: PoolRealArray

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

Array length (Floats)

Довжина

4

Integer (ціле)

32-bits IEEE 754 float

23: PoolStringArray

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

Array length (Strings)

For each String:

Зміщення

<title>LEN</title>

Тип

Опис

X+0

4

Integer (ціле)

String length

X+4

X

Байтів

UTF-8 encoded string

Every string is padded to 4 bytes.

24: PoolVector2Array

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

Array length

Довжина

4

Float

X coordinate

Довжина

4

Float

Y coordinate

25: PoolVector3Array

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

Array length

Довжина

4

Float

X coordinate

Довжина

4

Float

Y coordinate

Довжина

4

Float

Z coordinate

26: PoolColorArray

Зміщення

<title>LEN</title>

Тип

Опис

4

4

Integer (ціле)

Array length

Довжина

4

Float

Red (typically 0..1, can be above 1 for overbright colors)

Довжина

4

Float

Green (typically 0..1, can be above 1 for overbright colors)

Довжина

4

Float

Blue (typically 0..1, can be above 1 for overbright colors)

Довжина

4

Float

альфа