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.
The lowest value two bytes are used to determine the type, while the highest value two bytes contain flags:
base_type = val & 0xFFFF;
flags = val >> 16;
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-Pfad |
16 |
rid |
17 |
Objekt |
18 |
Dictionary (Wörterbuch) |
19 |
Array |
20 |
raw array |
21 |
int array |
22 |
real array |
23 |
string array |
24 |
vector2 array |
25 |
vector3 array |
26 |
Farb-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¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Ganze Zahl |
0 für "False", 1 für "True" |
2: int¶
If no flags are set (flags == 0), the integer is sent as a 32 bit integer:
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Ganze Zahl |
32-bit signed integer (Vorzeichen behaftet) |
If flag ENCODE_FLAG_64
is set (flags & 1 == 1
), the integer is sent as
a 64-bit integer:
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
8 |
Ganze Zahl |
64-Bit-Ganzzahl mit Vorzeichen |
3: float¶
If no flags are set (flags == 0), the float is sent as a 32 bit single precision:
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
IEEE 754 Fließkommazahl mit einfacher Genauigkeit |
If flag ENCODE_FLAG_64
is set (flags & 1 == 1
), the float is sent as
a 64-bit double precision number:
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
8 |
Float |
IEEE 754 Fließkommazahl mit doppelter Genauigkeit |
4: String¶
Versatz |
Länge |
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¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
X Koordinate |
8 |
4 |
Float |
Y Koordinate |
6: Rect2¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
X Koordinate |
8 |
4 |
Float |
Y Koordinate |
12 |
4 |
Float |
X Größe |
16 |
4 |
Float |
Y Größe |
7: Vector3¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
X Koordinate |
8 |
4 |
Float |
Y Koordinate |
12 |
4 |
Float |
Z Koordinate |
8: Transform2D¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
Die X-Komponente des X-Spaltenvektors, auf die über [0][0] zugegriffen wird |
8 |
4 |
Float |
Die Y-Komponente des X-Spaltenvektors, auf die über [0][1] zugegriffen wird |
12 |
4 |
Float |
Die X-Komponente des Y-Spaltenvektors, auf die über [1][0] zugegriffen wird |
16 |
4 |
Float |
Die Y-Komponente des Y-Spaltenvektors, auf die über [1][1] zugegriffen wird |
20 |
4 |
Float |
Die X Komponente des Ursprungsvektors, Zugriff über [2][0] |
24 |
4 |
Float |
Die Y Komponente des Ursprungsvektors, Zugriff über [2][1] |
9: Plane¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
Normal X |
8 |
4 |
Float |
Normal Y |
12 |
4 |
Float |
Normal Z |
16 |
4 |
Float |
Distanz |
10: Quat¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
Imaginäres X |
8 |
4 |
Float |
Imaginäres Y |
12 |
4 |
Float |
Imaginäres Z |
16 |
4 |
Float |
Reales W |
11: AABB¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
X Koordinate |
8 |
4 |
Float |
Y Koordinate |
12 |
4 |
Float |
Z Koordinate |
16 |
4 |
Float |
X Größe |
20 |
4 |
Float |
Y Größe |
24 |
4 |
Float |
Z Größe |
12: Basis¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
Die X-Komponente des X-Spaltenvektors, auf die über [0][0] zugegriffen wird |
8 |
4 |
Float |
Die Y-Komponente des X-Spaltenvektors, auf die über [0][1] zugegriffen wird |
12 |
4 |
Float |
Die Z-Komponente des X-Spaltenvektors, auf die über [0][2] zugegriffen wird |
16 |
4 |
Float |
Die X-Komponente des Y-Spaltenvektors, auf die über [1][0] zugegriffen wird |
20 |
4 |
Float |
Die Y-Komponente des Y-Spaltenvektors, auf die über [1][1] zugegriffen wird |
24 |
4 |
Float |
Die Z-Komponente des Y-Spaltenvektors, auf die über [1][2] zugegriffen wird |
28 |
4 |
Float |
Die X-Komponente des Z-Spaltenvektors, auf die über [2][0] zugegriffen wird |
32 |
4 |
Float |
Die Y-Komponente des Z-Spaltenvektors, auf die über [2][1] zugegriffen wird |
36 |
4 |
Float |
Die Z-Komponente des Z-Spaltenvektors, auf die über [2][2] zugegriffen wird |
13: Transform¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
Die X-Komponente des X-Spaltenvektors, auf die über [0][0] zugegriffen wird |
8 |
4 |
Float |
Die Y-Komponente des X-Spaltenvektors, auf die über [0][1] zugegriffen wird |
12 |
4 |
Float |
Die Z-Komponente des X-Spaltenvektors, auf die über [0][2] zugegriffen wird |
16 |
4 |
Float |
Die X-Komponente des Y-Spaltenvektors, auf die über [1][0] zugegriffen wird |
20 |
4 |
Float |
Die Y-Komponente des Y-Spaltenvektors, auf die über [1][1] zugegriffen wird |
24 |
4 |
Float |
Die Z-Komponente des Y-Spaltenvektors, auf die über [1][2] zugegriffen wird |
28 |
4 |
Float |
Die X-Komponente des Z-Spaltenvektors, auf die über [2][0] zugegriffen wird |
32 |
4 |
Float |
Die Y-Komponente des Z-Spaltenvektors, auf die über [2][1] zugegriffen wird |
36 |
4 |
Float |
Die Z-Komponente des Z-Spaltenvektors, auf die über [2][2] zugegriffen wird |
40 |
4 |
Float |
Die X Komponente des Ursprungsvektors, Zugriff über [3][0] |
44 |
4 |
Float |
Die Y Komponente des Ursprungsvektors. Zugriff über [3][1] |
48 |
4 |
Float |
Die Z Komponente des Ursprungsvektors, Zugriff über [3][2] |
14: Color¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Float |
Rot (normalerweise 0..1, kann über 1 sein für überstrahlende Farben) |
8 |
4 |
Float |
Grün (normalerweise 0..1, kann über 1 sein für überstrahlende Farben) |
12 |
4 |
Float |
Blau (normalerweise 0..1, kann über 1 sein für überstrahlende Farben) |
16 |
4 |
Float |
Alpha (0..1) |
15: NodePath¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Ganze Zahl |
Zeichenketten Länge, oder neues Format (val&0x80000000!=0 und NameCount=val&0x7FFFFFFF) |
für altes Format:¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
8 |
X |
Bytes |
UTF-8-codierte Zeichenfolge |
aufgefüllt auf 4 Byte.
für neues Format:¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Ganze Zahl |
Anzahl der Unternamen |
8 |
4 |
Ganze Zahl |
Flags (absolut: val&1 != 0 ) |
Für jeden Namen und Unter-Namen
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
X+0 |
4 |
Ganze Zahl |
Zeichenketten Länge |
X+4 |
X |
Bytes |
UTF-8-codierte Zeichenfolge |
Jede Namenszeichenfolge wird auf 4 Bytes aufgefüllt.
16: RID (nicht unterstützt)¶
17: Object (nicht unterstützt)¶
18: Dictionary¶
Versatz |
Länge |
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¶
Versatz |
Länge |
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¶
Versatz |
Länge |
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¶
Versatz |
Länge |
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¶
Versatz |
Länge |
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¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Ganze Zahl |
Feld Länge (Zeichenketten) |
für jede Zeichenkette:
Versatz |
Länge |
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¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Ganze Zahl |
Array Länge |
8..8+Länge*8 |
4 |
Float |
X Koordinate |
8..12+Länge*8 |
4 |
Float |
Y Koordinate |
25: PoolVector3Array¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Ganze Zahl |
Array Länge |
8..8+Länge*12 |
4 |
Float |
X Koordinate |
8..12+Länge*12 |
4 |
Float |
Y Koordinate |
8..16+Länge*12 |
4 |
Float |
Z Koordinate |
26: PoolColorArray¶
Versatz |
Länge |
Art |
Beschreibung |
---|---|---|---|
4 |
4 |
Ganze Zahl |
Array Länge |
8..8+Länge*16 |
4 |
Float |
Rot (normalerweise 0..1, kann über 1 sein für überstrahlende Farben) |
8..12+Länge*16 |
4 |
Float |
Grün (normalerweise 0..1, kann über 1 sein für überstrahlende Farben) |
8..16+Länge*16 |
4 |
Float |
Blau (normalerweise 0..1, kann über 1 sein für überstrahlende Farben) |
8..20+Länge*16 |
4 |
Float |
Alpha (0..1) |