Binarna serizlizacja API

Wprowadzenie

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 class_File as well as the packet APIs for class_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:

Typ Wartość
0 null
1 bool
2 integer
3 float
4 string
5 vector2
6 rect2
7 vector3
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 max

Following this is the actual packet contents, which varies for each type of packet:

0: null

1: bool

Przesunięcie Długość Typ Opis
4 4 Integer 0 - Fałsz, 1 - Prawda

2: int

Przesunięcie Długość Typ Opis
4 4 Integer Signed, 32-Bit Integer

3: float/real

Przesunięcie Długość Typ Opis
4 4 Float IEE 754 32-Bitowe Liczby Zmiennoprzecinkowe

4: String

Przesunięcie Długość Typ Opis
4 4 Integer Długość Łańcucha Znaków (w Bajtach)
8 X Bajty UTF-8 Encoded String

This field is padded to 4 bytes.

5: Vector2

Przesunięcie Długość Typ Opis
4 4 Float Koordynat X
8 4 Float Koordynat Y

6: Rect2

Przesunięcie Długość Typ Opis
4 4 Float Koordynat X
8 4 Float Koordynat Y
12 4 Float X Size
16 4 Float Y Size

7: Vector3

Przesunięcie Długość Typ Opis
4 4 Float Koordynat X
8 4 Float Koordynat Y
12 4 Float Z Coordinate

8: Transform2D

Przesunięcie Długość Typ Opis
4 4 Float [0][0]
8 4 Float [0][1]
12 4 Float [1][0]
16 4 Float [1][1
20 4 Float [2][0]
24 4 Float [2][1]

9: Plane

Przesunięcie Długość Typ Opis
4 4 Float Normal X
8 4 Float Normal Y
12 4 Float Normal Z
16 4 Float Distance

10: Quat

Przesunięcie Długość Typ Opis
4 4 Float Zespolone X
8 4 Float Zespolone Y
12 4 Float Zespolone Z
16 4 Float Rzeczywiste W

11: AABB

Przesunięcie Długość Typ Opis
4 4 Float Koordynat X
8 4 Float Koordynat Y
12 4 Float Z Coordinate
16 4 Float X Size
20 4 Float Y Size
24 4 Float Wielkość Z

12: Basis

Przesunięcie Długość Typ Opis
4 4 Float [0][0]
8 4 Float [0][1]
12 4 Float [0][2]
16 4 Float [1][0]
20 4 Float [1][1
24 4 Float [1][2]
28 4 Float [2][0]
32 4 Float [2][1]
36 4 Float [2][2]

13: Transform

Przesunięcie Długość Typ Opis
4 4 Float [0][0]
8 4 Float [0][1]
12 4 Float [0][2]
16 4 Float [1][0]
20 4 Float [1][1
24 4 Float [1][2]
28 4 Float [2][0]
32 4 Float [2][1]
36 4 Float [2][2]
40 4 Float [3][0]
44 4 Float [3][1]
48 4 Float [3][2]

14: Color

Przesunięcie Długość Typ Opis
4 4 Float Czerwony (0..1)
8 4 Float Zielony (0..1)
12 4 Float Niebieski (0..1)
16 4 Float Przezroczystość (0..1)

15: NodePath

Przesunięcie Długość Typ Opis
4 4 Integer String Length, or New Format (val&0x80000000!=0 and NameCount=val&0x7FFFFFFF)

Dla starego formatu:

Przesunięcie Długość Typ Opis
8 X Bajty UTF-8 Encoded String

Padded to 4 bytes.

Dla nowego formatu:

Przesunięcie Długość Typ Opis
4 4 Integer Sub-Name Count
8 4 Integer Flags (absolute: val&1 != 0 )

For each Name and Sub-Name

Przesunięcie Długość Typ Opis
X+0 4 Integer Długość Łańcucha Znaków
X+4 X Bajty UTF-8 Encoded String

Every name string is padded to 4 bytes.

16: RID (niewspierany)

17: Object (niewspierany)

18: Dictionary

Przesunięcie Długość Typ Opis
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

Przesunięcie Długość Typ Opis
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

Przesunięcie Długość Typ Opis
4 4 Integer Długość tablicy (Bajty)
8..8+długość 1 Bajt Bajt (0..255)

The array data is padded to 4 bytes.

21: PoolIntArray

Przesunięcie Długość Typ Opis
4 4 Integer Długość tablicy (Liczby Całkowite)
8..8+długość*4 4 Integer 32 Bity Dodatnich Liczb Całkowitych

22: PoolRealArray

Przesunięcie Długość Typ Opis
4 4 Integer Długość tablicy (Liczby zmiennoprzecinkowe)
8..8+długość*4 4 Integer 32 Bity IEE 754 Liczby Zmiennoprzecinkowe

23: PoolStringArray

Przesunięcie Długość Typ Opis
4 4 Integer Długość tablicy (Łańcuch znaków)

Dla każdego łańcucha znaków:

Przesunięcie Długość Typ Opis
X+0 4 Integer Długość Łańcucha Znaków
X+4 X Bajty UTF-8 Encoded String

Every string is padded to 4 bytes.

24: PoolVector2Array

Przesunięcie Długość Typ Opis
4 4 Integer Długość tablicy
8..8+długość*8 4 Float Koordynat X
8..12+długość*8 4 Float Koordynat Y

25: PoolVector3Array

Przesunięcie Długość Typ Opis
4 4 Integer Długość tablicy
8..8+długość*12 4 Float Koordynat X
8..12+długość*12 4 Float Koordynat Y
8..16+długość*12 4 Float Z Coordinate

26: PoolColorArray

Przesunięcie Długość Typ Opis
4 4 Integer Długość tablicy
8..8+długość*16 4 Float Czerwony (0..1)
8..12+długość*16 4 Float Zielony (0..1)
8..16+długość*16 4 Float Niebieski (0..1)
8..20+długość*16 4 Float Przezroczystość (0..1)