Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

API di serializzazione binaria

Introduzione

Godot include un'API di serializzazione basata su Variant. È utilizzata per convertire efficientemente i tipi di dati in un array di byte. Questa API è esposta tramite le funzioni globali bytes_to_var() e var_to_bytes(), ma è utilizzata anche nei metodi get_var e store_var di FileAccess, nonché nelle API dei pacchetti per PacketPeer. Questo formato non è utilizzato per scene e risorse binarie.

Interi oggetti vs ID istanza di oggetto

Se una variabile viene serializzata con full_objects = true, tutti gli oggetti contenuti nella variabile verranno serializzati e inclusi nel risultato. Ciò è ricorsivo.

Se full_objects = false, solo gli ID istanza verranno serializzati, per ogni oggetto contenuto nella variabile.

Specificazione dei pacchetti

Il pacchetto è progettato per essere sempre imbottito a 4 byte. Tutti i valori sono codificati in little-endian. Tutti i pacchetti hanno un'intestazione di 4 byte che rappresenta un intero, specificando il tipo di dati.

I due byte con il valore più basso vengono utilizzati per determinare il tipo, mentre i due byte con il valore più alto contengono i flag:

base_type = val & 0xFFFF;
flags = val >> 16;

Tipo

Valore

0

null

1

bool

2

integer

3

float

4

string

5

vector2

6

rect2

7

vector3

8

transform2d

9

plane

10

quaternion

11

aabb

12

basis

13

transform3d

14

color

15

node path

16

rid

17

object

18

dictionary

19

array

20

raw array

21

int32 array

22

int64 array

23

float32 array

24

float64 array

25

string array

26

vector2 array

27

vector3 array

28

color array

29

max

A seguire è il contenuto effettivo del pacchetto, che varia a seconda del tipo di pacchetto. Si noti che questo presuppone che Godot sia compilato con float a precisione singola, che è l'impostazione predefinita. Se Godot fosse compilato con float a precisione doppia, la lunghezza dei campi "Float" all'interno delle strutture dati dovrebbe essere 8, e l'offset dovrebbe essere (offset - 4) * 2 + 4. Il tipo "float" stesso utilizza sempre la precisione doppia.

0: null

1: bool

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

0 per False, 1 per True

2: int

Se non sono impostati flag (flags == 0), l'intero viene inviato come intero a 32 bit:

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Numero intero con segno a 32 bit

Se il flag ENCODE_FLAG_64 è impostato (flags & 1 == 1), l'intero viene inviato come intero a 64 bit:

Scostamento

Len

Tipo

Descrizione

4

8

Numero intero

Numero intero con segno a 64 bit

3: float

Se nessun flag è impostato (flags == 0), il float viene inviato con precisione singola a 32 bit:

Scostamento

Len

Tipo

Descrizione

4

4

Float

Float IEEE 754 a precisione singola

Se il flag ENCODE_FLAG_64 è impostato (flags & 1 == 1), il float viene inviato come numero a doppia precisione a 64 bit:

Scostamento

Len

Tipo

Descrizione

4

8

Float

Float IEEE 754 a precisione doppia

4: String

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza della stringa (in byte)

8

X

Byte

Stringa codificata in UTF-8

Questo campo è imbottito a 4 byte.

5: Vector2

Scostamento

Len

Tipo

Descrizione

4

4

Float

Coordinata X

8

4

Float

Coordinata Y

6: Rect2

Scostamento

Len

Tipo

Descrizione

4

4

Float

Coordinata X

8

4

Float

Coordinata Y

12

4

Float

Dimensione in X

16

4

Float

Dimensione in Y

7: Vector3

Scostamento

Len

Tipo

Descrizione

4

4

Float

Coordinata X

8

4

Float

Coordinata Y

12

4

Float

Coordinata Z

8: Transform2D

Scostamento

Len

Tipo

Descrizione

4

4

Float

La componente X del vettore colonna X, accessibile tramite [0][0]

8

4

Float

La componente Y del vettore colonna X, accessibile tramite [0][1]

12

4

Float

La componente X del vettore colonna Y, accessibile tramite [1][0]

16

4

Float

La componente Y del vettore colonna Y, accessibile tramite [1][1]

20

4

Float

La componente X del vettore origine, accessibile tramite [2][0]

24

4

Float

La componente Y del vettore origine, accessibile tramite [2][1]

9: Plane

Scostamento

Len

Tipo

Descrizione

4

4

Float

Normale in X

8

4

Float

Normale in Y

12

4

Float

Normale in Z

16

4

Float

Distanza

10: Quaternion

Scostamento

Len

Tipo

Descrizione

4

4

Float

X immaginario

8

4

Float

Y immaginario

12

4

Float

Z immaginario

16

4

Float

W reale

11: AABB

Scostamento

Len

Tipo

Descrizione

4

4

Float

Coordinata X

8

4

Float

Coordinata Y

12

4

Float

Coordinata Z

16

4

Float

Dimensione in X

20

4

Float

Dimensione in Y

24

4

Float

Dimensione in Z

12: Basis

Scostamento

Len

Tipo

Descrizione

4

4

Float

La componente X del vettore colonna X, accessibile tramite [0][0]

8

4

Float

La componente Y del vettore colonna X, accessibile tramite [0][1]

12

4

Float

La componente Z del vettore colonna X, accessibile tramite [0][2]

16

4

Float

La componente X del vettore colonna Y, accessibile tramite [1][0]

20

4

Float

La componente Y del vettore colonna Y, accessibile tramite [1][1]

24

4

Float

La componente Z del vettore colonna Y, accessibile tramite [1][2]

28

4

Float

La componente X del vettore colonna Z, accessibile tramite [2][0]

32

4

Float

La componente Y del vettore colonna Z, accessibile tramite [2][1]

36

4

Float

La componente Z del vettore colonna Z, accessibile tramite [2][2]

13: Transform3D

Scostamento

Len

Tipo

Descrizione

4

4

Float

La componente X del vettore colonna X, accessibile tramite [0][0]

8

4

Float

La componente Y del vettore colonna X, accessibile tramite [0][1]

12

4

Float

La componente Z del vettore colonna X, accessibile tramite [0][2]

16

4

Float

La componente X del vettore colonna Y, accessibile tramite [1][0]

20

4

Float

La componente Y del vettore colonna Y, accessibile tramite [1][1]

24

4

Float

La componente Z del vettore colonna Y, accessibile tramite [1][2]

28

4

Float

La componente X del vettore colonna Z, accessibile tramite [2][0]

32

4

Float

La componente Y del vettore colonna Z, accessibile tramite [2][1]

36

4

Float

La componente Z del vettore colonna Z, accessibile tramite [2][2]

40

4

Float

La componente X del vettore origine, accessibile tramite [3][0]

44

4

Float

La componente Y del vettore origine, accessibile tramite [3][1]

48

4

Float

La componente Z del vettore origine, accessibile tramite [3][2]

14: Color

Scostamento

Len

Tipo

Descrizione

4

4

Float

Rosso (tipicamente 0..1, può essere superiore a 1 per colori sovra-luminosi)

8

4

Float

Verde (tipicamente 0..1, può essere superiore a 1 per colori sovra-luminosi)

12

4

Float

Blu (tipicamente 0..1, può essere superiore a 1 per colori sovra-luminosi)

16

4

Float

Alfa (0..1)

15: NodePath

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza della stringa, o nuovo formato (val&0x80000000!=0 e NameCount=val&0x7FFFFFFF)

Per il vecchio formato:

Scostamento

Len

Tipo

Descrizione

8

X

Byte

Stringa codificata in UTF-8

Imbottito a 4 byte.

Per il nuovo formato:

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Conteggio dei sotto-nomi

8

4

Numero intero

Flag (assoluto: val&1 != 0 )

Per ogni nome e sotto-nome

Scostamento

Len

Tipo

Descrizione

X+0

4

Numero intero

Lunghezza della stringa

X+4

X

Byte

Stringa codificata in UTF-8

Ogni stringa di nome è imbottita a 4 byte.

16: RID (non supportato)

17: Object

Un oggetto può essere serializzato in tre modi diversi: come valore null, con full_objects = false o con full_objects = true.

Un valore null

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Zero (intero con segno a 32 bit)

full_objects disabilitato

Scostamento

Len

Tipo

Descrizione

4

8

Numero intero

L'ID istanza dell'oggetto (intero con segno a 64 bit)

full_objects abilitato

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Nome di classe (lunghezza della stringa)

8

X

Byte

Nome di classe (stringa codificata in UTF-8)

X+8

4

Numero intero

Il numero di proprietà serializzate

Per ogni proprietà:

Scostamento

Len

Tipo

Descrizione

Y

4

Numero intero

Nome di proprietà (lunghezza della stringa)

X+4

Z

Byte

Nome di proprietà (stringa codificata in UTF-8)

Y+4+Z

W

<variabile>

Valore di proprietà, utilizzando lo stesso formato

Nota

Non tutte le proprietà sono incluse. Solo le proprietà configurate con il flag PROPERTY_USAGE_STORAGE impostato verranno serializzate. È possibile aggiungere un nuovo flag di utilizzo a una proprietà sovrascrivendo il metodo _get_property_list nella classe. È anche possibile verificare come è configurato l'utilizzo della proprietà chiamando Object._get_property_list. Consultare PropertyUsageFlags per i flag di utilizzo possibili.

18: Dictionary

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

val&0x7FFFFFFF = elementi, val&0x80000000 = condiviso (bool)

Ciò che segue è, per la quantità di "elementi", coppie di chiave e valore, una dopo l'altra, utilizzando questo stesso formato.

19: Array

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

val&0x7FFFFFFF = elementi, val&0x80000000 = condiviso (bool)

Ciò che segue è, per la quantità di "elementi", valori uno dopo l'altro, utilizzando questo stesso formato.

20: PackedByteArray

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza dell'array (Byte)

8..8+lunghezza

1

Byte

Byte (0..255)

I dati dell'array sono imbottiti a 4 byte.

21: PackedInt32Array

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza dell'array (interi)

8..8+lunghezza*4

4

Numero intero

Numero intero con segno a 32 bit

22: PackedInt64Array

Scostamento

Len

Tipo

Descrizione

4

8

Numero intero

Lunghezza dell'array (interi)

8..8+lunghezza*8

8

Numero intero

Numero intero con segno a 64 bit

23: PackedFloat32Array

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza dell'array (float)

8..8+lunghezza*4

4

Numero intero

float IEEE 754 a precisione singola a 32 bit

24: PackedFloat64Array

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza dell'array (float)

8..8+lunghezza*8

8

Numero intero

float IEEE 754 a precisione doppia a 64 bit

25: PackedStringArray

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza dell'array (Stringhe)

Per ogni stringa:

Scostamento

Len

Tipo

Descrizione

X+0

4

Numero intero

Lunghezza della stringa

X+4

X

Byte

Stringa codificata in UTF-8

Ogni stringa è imbottita a 4 byte.

26: PackedVector2Array

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza dell'array

8..8+lunghezza*8

4

Float

Coordinata X

8..12+lunghezza*8

4

Float

Coordinata Y

27: PackedVector3Array

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza dell'array

8..8+lunghezza*12

4

Float

Coordinata X

8..12+lunghezza*12

4

Float

Coordinata Y

8..16+lunghezza*12

4

Float

Coordinata Z

28: PackedColorArray

Scostamento

Len

Tipo

Descrizione

4

4

Numero intero

Lunghezza dell'array

8..8+lunghezza*16

4

Float

Rosso (tipicamente 0..1, può essere superiore a 1 per colori sovra-luminosi)

8..12+lunghezza*16

4

Float

Verde (tipicamente 0..1, può essere superiore a 1 per colori sovra-luminosi)

8..16+lunghezza*16

4

Float

Blu (tipicamente 0..1, può essere superiore a 1 per colori sovra-luminosi)

8..20+lunghezza*16

4

Float

Alfa (0..1)