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)