Binäre Serialisierungs-API

Einführung

Godot verfügt über eine einfache Serialisierungs-API, die auf Variant basiert. Sie wird verwendet um Datentypen effizient in ein Array von Bytes zu konvertieren. Diese API wird in den Funktionen get_var und store_var von File sowie in den Paket-APIs für PacketPeer verwendet. Dieses Format wird nicht für binäre Szenen und Ressourcen verwendet.

Paketspezifikation

Das Paket ist so konzipiert, dass es immer auf 4 Bytes aufgefüllt wird. Alle Werte sind Little-Endian-codiert (kleinstwertige Byte zuerst). Alle Pakete haben einen 4-Byte-Header, der eine Ganzzahl darstellt und den Datentyp angibt:

Art Wert
0 null
1 bool
2 integer (Ganzzahl)
3 float
4 Zeichenkette
5 vector2
6 rect2
7 vector3
8 transform2d
9 plane
10 quat
11 aabb
12 basis
13 transform
14 Farbe
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

Darauf folgt der tatsächliche Paketinhalt, der für jeden Pakettyp unterschiedlich ist. Beachten Sie, dass dies voraussetzt, dass Godot mit Fließkommzahlen einfacher Genauigkeit kompiliert wird. Dies ist die Standardeinstellung. Wenn Godot mit Fließkommzahlen doppelter Genauigkeit kompiliert wurde, sollte die Länge der "Float"-Felder in Datenstrukturen 8 und der Offset (offset - 4) * 2 + 4 betragen. Der Typ "float" selbst verwendet immer die doppelte Genauigkeit.

0: null

1: bool

Offset Len Art Beschreibung
4 4 Ganze Zahl 0 für "False", 1 für "True"

2: int

Offset Len Art Beschreibung
4 8 Ganze Zahl 64-Bit-Ganzzahl mit Vorzeichen

3: float

Offset Len Art Beschreibung
4 4 Fliesskommazahl IEE 754 32-Bit Fliesskommazahl

4: String

Offset Len Art Beschreibung
4 4 Ganze Zahl String Länge (in Bytes)
8 X Bytes UTF-8-codierte Zeichenfolge

Dieses Feld wird auf 4 Bytes aufgefüllt.

5: Vector2

Offset Len Art Beschreibung
4 4 Fliesskommazahl X Koordinate
8 4 Fliesskommazahl Y Koordinate

6: Rect2

Offset Len Art Beschreibung
4 4 Fliesskommazahl X Koordinate
8 4 Fliesskommazahl Y Koordinate
12 4 Fliesskommazahl X Größe
16 4 Fliesskommazahl Y Größe

7: Vector3

Offset Len Art Beschreibung
4 4 Fliesskommazahl X Koordinate
8 4 Fliesskommazahl Y Koordinate
12 4 Fliesskommazahl Z Koordinate

8: Transform2D

Offset Len Art Beschreibung
4 4 Fliesskommazahl Die X-Komponente des X-Spaltenvektors, auf die über [0][0] zugegriffen wird
8 4 Fliesskommazahl Die Y-Komponente des X-Spaltenvektors, auf die über [0][1] zugegriffen wird
12 4 Fliesskommazahl Die X-Komponente des Y-Spaltenvektors, auf die über [1][0] zugegriffen wird
16 4 Fliesskommazahl Die Y-Komponente des Y-Spaltenvektors, auf die über [1][1] zugegriffen wird
20 4 Fliesskommazahl Die X Komponente des Ursprungsvektors, Zugriff über [2][0]
24 4 Fliesskommazahl Die Y Komponente des Ursprungsvektors, Zugriff über [2][1]

9: Plane

Offset Len Art Beschreibung
4 4 Fliesskommazahl Normal X
8 4 Fliesskommazahl Normal Y
12 4 Fliesskommazahl Normal Z
16 4 Fliesskommazahl Entfernung

10: Quat

Offset Len Art Beschreibung
4 4 Fliesskommazahl Imaginäres X
8 4 Fliesskommazahl Imaginäres Y
12 4 Fliesskommazahl Imaginäres Z
16 4 Fliesskommazahl tatsächliches W

11: AABB

Offset Len Art Beschreibung
4 4 Fliesskommazahl X Koordinate
8 4 Fliesskommazahl Y Koordinate
12 4 Fliesskommazahl Z Koordinate
16 4 Fliesskommazahl X Größe
20 4 Fliesskommazahl Y Größe
24 4 Fliesskommazahl Z Größe

12: Basis

Offset Len Art Beschreibung
4 4 Fliesskommazahl Die X-Komponente des X-Spaltenvektors, auf die über [0][0] zugegriffen wird
8 4 Fliesskommazahl Die Y-Komponente des X-Spaltenvektors, auf die über [0][1] zugegriffen wird
12 4 Fliesskommazahl Die Z-Komponente des X-Spaltenvektors, auf die über [0][2] zugegriffen wird
16 4 Fliesskommazahl Die X-Komponente des Y-Spaltenvektors, auf die über [1][0] zugegriffen wird
20 4 Fliesskommazahl Die Y-Komponente des Y-Spaltenvektors, auf die über [1][1] zugegriffen wird
24 4 Fliesskommazahl Die Z-Komponente des Y-Spaltenvektors, auf die über [1][2] zugegriffen wird
28 4 Fliesskommazahl Die X-Komponente des Z-Spaltenvektors, auf die über [2][0] zugegriffen wird
32 4 Fliesskommazahl Die Y-Komponente des Z-Spaltenvektors, auf die über [2][1] zugegriffen wird
36 4 Fliesskommazahl Die Z-Komponente des Z-Spaltenvektors, auf die über [2][2] zugegriffen wird

13: Transform

Offset Len Art Beschreibung
4 4 Fliesskommazahl Die X-Komponente des X-Spaltenvektors, auf die über [0][0] zugegriffen wird
8 4 Fliesskommazahl Die Y-Komponente des X-Spaltenvektors, auf die über [0][1] zugegriffen wird
12 4 Fliesskommazahl Die Z-Komponente des X-Spaltenvektors, auf die über [0][2] zugegriffen wird
16 4 Fliesskommazahl Die X-Komponente des Y-Spaltenvektors, auf die über [1][0] zugegriffen wird
20 4 Fliesskommazahl Die Y-Komponente des Y-Spaltenvektors, auf die über [1][1] zugegriffen wird
24 4 Fliesskommazahl Die Z-Komponente des Y-Spaltenvektors, auf die über [1][2] zugegriffen wird
28 4 Fliesskommazahl Die X-Komponente des Z-Spaltenvektors, auf die über [2][0] zugegriffen wird
32 4 Fliesskommazahl Die Y-Komponente des Z-Spaltenvektors, auf die über [2][1] zugegriffen wird
36 4 Fliesskommazahl Die Z-Komponente des Z-Spaltenvektors, auf die über [2][2] zugegriffen wird
40 4 Fliesskommazahl Die X Komponente des Ursprungsvektors, Zugriff über [3][0]
44 4 Fliesskommazahl Die Y Komponente des Ursprungsvektors. Zugriff über [3][1]
48 4 Fliesskommazahl Die Z Komponente des Ursprungsvektors, Zugriff über [3][2]

14: Color

Offset Len Art Beschreibung
4 4 Fliesskommazahl Rot (normalerweise 0..1, kann über 1 sein für überstrahlende Farben)
8 4 Fliesskommazahl Grün (normalerweise 0..1, kann über 1 sein für überstrahlende Farben)
12 4 Fliesskommazahl Blau (normalerweise 0..1, kann über 1 sein für überstrahlende Farben)
16 4 Fliesskommazahl Alpha (0..1)

15: NodePath

Offset Len Art Beschreibung
4 4 Ganze Zahl Zeichenketten Länge, oder neues Format (val&0x80000000!=0 und NameCount=val&0x7FFFFFFF)

für altes Format:

Offset Len Art Beschreibung
8 X Bytes UTF-8-codierte Zeichenfolge

aufgefüllt auf 4 Byte.

für neues Format:

Offset Len Art Beschreibung
4 4 Ganze Zahl Anzahl der Unternamen
8 4 Ganze Zahl Flags (absolut: val&1 != 0 )

For each Name and Sub-Name

Offset Len Art Beschreibung
X+0 4 Ganze Zahl Zeichenketten Länge
X+4 X Bytes UTF-8-codierte Zeichenfolge

Every name string is padded to 4 bytes.

16: RID (nicht unterstützt)

17: Object (nicht unterstützt)

18: Dictionary

Offset Len Art Beschreibung
4 4 Ganze Zahl val&0x7FFFFFFF = Elemente, 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

Offset Len Art Beschreibung
4 4 Ganze Zahl val&0x7FFFFFFF = Elemente, val&0x80000000 = shared (Bool)

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

20: PoolByteArray

Offset Len Art Beschreibung
4 4 Ganze Zahl Feld Länge (Bytes)
8..8+Länge 1 Byte Byte (0..255)

Die Array-Daten werden auf 4 Byte aufgefüllt.

21: PoolIntArray

Offset Len Art Beschreibung
4 4 Ganze Zahl Feld Länge (Integer)
8..8+Länge*4 4 Ganze Zahl 32-bit signed integer (Vorzeichen behaftet)

22: PoolRealArray

Offset Len Art Beschreibung
4 4 Ganze Zahl Array Länge (Fließkomma)
8..8+Länge*4 4 Ganze Zahl 32-bit IEEE 754 Fließkomma

23: PoolStringArray

Offset Len Art Beschreibung
4 4 Ganze Zahl Feld Länge (Zeichenketten)

für jede Zeichenkette:

Offset Len Art Beschreibung
X+0 4 Ganze Zahl Zeichenketten Länge
X+4 X Bytes UTF-8-codierte Zeichenfolge

Jede Zeichenkette wird auf 4 Bytes aufgefüllt.

24: PoolVector2Array

Offset Len Art Beschreibung
4 4 Ganze Zahl Array Länge
8..8+Länge*8 4 Fliesskommazahl X Koordinate
8..12+Länge*8 4 Fliesskommazahl Y Koordinate

25: PoolVector3Array

Offset Len Art Beschreibung
4 4 Ganze Zahl Array Länge
8..8+Länge*12 4 Fliesskommazahl X Koordinate
8..12+Länge*12 4 Fliesskommazahl Y Koordinate
8..16+Länge*12 4 Fliesskommazahl Z Koordinate

26: PoolColorArray

Offset Len Art Beschreibung
4 4 Ganze Zahl Array Länge
8..8+Länge*16 4 Fliesskommazahl Rot (normalerweise 0..1, kann über 1 sein für überstrahlende Farben)
8..12+Länge*16 4 Fliesskommazahl Grün (normalerweise 0..1, kann über 1 sein für überstrahlende Farben)
8..16+Länge*16 4 Fliesskommazahl Blau (normalerweise 0..1, kann über 1 sein für überstrahlende Farben)
8..20+Länge*16 4 Fliesskommazahl Alpha (0..1)