API de serialización Binaria¶
Introducción¶
Godot tiene una API de serialización simple basada en Variant. Se utiliza para convertir tipos de datos en un arreglo de bytes de manera eficiente. Esta API se utiliza en las funciones get_var
y store_var
de File, así como en las API de paquetes para PacketPeer. Este formato no se utiliza para escenas y recursos binarios.
Especificación de paquete¶
El paquete está diseñado para que siempre tenga un relleno de 4 bytes. Todos los valores están codificados en formato little-endian. Todos los paquetes tienen una cabecera de 4 bytes que representa un entero, especificando el tipo de datos.
Los dos bytes de menor valor se utilizan para determinar el tipo, mientras que los dos bytes de mayor valor contienen flags:
base_type = val & 0xFFFF;
flags = val >> 16;
Tipo |
Valor |
---|---|
0 |
null |
1 |
bool |
2 |
entero |
3 |
real |
4 |
string |
5 |
vector2 |
6 |
rect2 |
7 |
vector3 |
8 |
transformación 2d |
9 |
plano |
10 |
cuat |
11 |
aabb* |
12 |
bases |
13 |
transformación |
14 |
color |
15 |
ruta de nodo |
16 |
rid (Resource ID) |
17 |
objeto |
18 |
diccionario |
19 |
arreglo |
20 |
array crudo |
21 |
arreglo int |
22 |
array real |
23 |
array de cadenas |
24 |
array de vector2 |
25 |
array de vector3 |
26 |
array de color |
27 |
maximo |
A continuación se encuentran los contenidos reales del paquete, los cuales varían para cada tipo de paquete. Ten en cuenta que esto asume que Godot está compilado con floats de precisión simple, que es el valor predeterminado. Si Godot se compiló con floats de precisión doble, la longitud de los campos Float
dentro de las estructuras de datos debería ser de 8 y el desplazamiento debería ser (offset - 4) * 2 + 4
. El tipo float
en sí siempre utiliza precisión doble.
0: nulo¶
1: bool¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
0 para False, 1 para True |
2: int¶
Si no se establecen banderas (flags == 0), el entero se envía como un entero de 32 bits:
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Entero con signo de 32 bits |
Si la bandera ENCODE_FLAG_64
está establecida (flags & 1 == 1
), el entero se envía como un entero de 64 bits:
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
8 |
Entero |
Entero de 64 bits con signo |
3: float¶
Si no se establecen banderas (flags == 0), el flotante se envía como una precisión simple de 32 bits:
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
IEEE 754 flotante de precisión simple |
Si la bandera ENCODE_FLAG_64
está establecida (flags & 1 == 1
), el flotante se envía como un número de precisión doble de 64 bits:
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
8 |
Flotante |
IEEE 754 flotante de precisión doble |
4: String¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Longitud de cadenas (en bytes) |
8 |
X |
Bytes |
Cadena codificada en UTF-8 |
Este campo se rellena hasta alcanzar 4 bytes.
5: Vector2¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
Coordenada X |
8 |
4 |
Flotante |
Coordenada Y |
6: Rect2¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
Coordenada X |
8 |
4 |
Flotante |
Coordenada Y |
12 |
4 |
Flotante |
Tamaño en X |
16 |
4 |
Flotante |
Tamaño en Y |
7: Vector3¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
Coordenada X |
8 |
4 |
Flotante |
Coordenada Y |
12 |
4 |
Flotante |
Coordenada Z |
8: Transform2D¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
La componente X del vector columna X, accedido mediante [0][0] |
8 |
4 |
Flotante |
La componente Y del vector columna X, accedido mediante [0][1] |
12 |
4 |
Flotante |
La componente X del vector columna Y, accedido mediante [1][0] |
16 |
4 |
Flotante |
La componente Y del vector columna Y, accedido mediante [1][1] |
20 |
4 |
Flotante |
La componente X del vector origin, accedido mediante [2][0] |
24 |
4 |
Flotante |
La componente Y del vector origin, accedido mediante [2][1] |
9: Plane¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
Normal en X |
8 |
4 |
Flotante |
Normal en Y |
12 |
4 |
Flotante |
Normal en Z |
16 |
4 |
Flotante |
Distancia |
10: Quat¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
X imaginario |
8 |
4 |
Flotante |
Y imaginario |
12 |
4 |
Flotante |
Z imaginario |
16 |
4 |
Flotante |
W real |
11: AABB¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
Coordenada X |
8 |
4 |
Flotante |
Coordenada Y |
12 |
4 |
Flotante |
Coordenada Z |
16 |
4 |
Flotante |
Tamaño en X |
20 |
4 |
Flotante |
Tamaño en Y |
24 |
4 |
Flotante |
Tamaño en Z |
12: Basis¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
La componente X del vector columna X, accedido mediante [0][0] |
8 |
4 |
Flotante |
La componente Y del vector columna X, accedido mediante [0][1] |
12 |
4 |
Flotante |
La componente Z del vector columna X, accedido mediante [0][2] |
16 |
4 |
Flotante |
La componente X del vector columna Y, accedido mediante [1][0] |
20 |
4 |
Flotante |
La componente Y del vector columna Y, accedido mediante [1][1] |
24 |
4 |
Flotante |
La componente Z del vector columna Y, accedido mediante [1][2] |
28 |
4 |
Flotante |
La componente X del vector columna Z, accedido mediante [2][0] |
32 |
4 |
Flotante |
La componente Y del vector columna Z, accedido mediante [2][1] |
36 |
4 |
Flotante |
La componente Z del vector columna Z, accedido mediante [2][2] |
13: Transform¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
La componente X del vector columna X, accedido mediante [0][0] |
8 |
4 |
Flotante |
La componente Y del vector columna X, accedido mediante [0][1] |
12 |
4 |
Flotante |
La componente Z del vector columna X, accedido mediante [0][2] |
16 |
4 |
Flotante |
La componente X del vector columna Y, accedido mediante [1][0] |
20 |
4 |
Flotante |
La componente Y del vector columna Y, accedido mediante [1][1] |
24 |
4 |
Flotante |
La componente Z del vector columna Y, accedido mediante [1][2] |
28 |
4 |
Flotante |
La componente X del vector columna Z, accedido mediante [2][0] |
32 |
4 |
Flotante |
La componente Y del vector columna Z, accedido mediante [2][1] |
36 |
4 |
Flotante |
La componente Z del vector columna Z, accedido mediante [2][2] |
40 |
4 |
Flotante |
La componente X del vector origin, accedido mediante [3][0] |
44 |
4 |
Flotante |
La componente Y del vector origin, accedido mediante [3][1] |
48 |
4 |
Flotante |
La componente Z del vector origin, accedido mediante [3][2] |
14: Color¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Flotante |
Rojo (generalmente en el rango de 0 a 1, pero puede ser superior a 1 para colores muy brillantes) |
8 |
4 |
Flotante |
Verde (generalmente en el rango de 0 a 1, pero puede ser superior a 1 para colores muy brillantes) |
12 |
4 |
Flotante |
Azul (generalmente en el rango de 0 a 1, pero puede ser superior a 1 para colores muy brillantes) |
16 |
4 |
Flotante |
Alpha (0..1) |
15: NodePath¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Longitud de la cadena o nuevo formato (val&0x80000000!=0 y NameCount=val&0x7FFFFFFF) |
Para el viejo formato:¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
8 |
X |
Bytes |
Cadena codificada en UTF-8 |
Rellenado a 4 bytes.
Para el nuevo formato:¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
conteo de sub-nombre |
8 |
4 |
Entero |
Banderas (absolute: val&1 != 0 ) |
Por cada Nombre y Sub-nombre
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
X+0 |
4 |
Entero |
Longitud de la cuerda |
X+4 |
X |
Bytes |
Cadena codificada en UTF-8 |
Cada cadena de nombres es rellenado a 4 bytes.
16: RID (sin soporte)¶
17: Object (sin soporte)¶
18: Dictionary¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
val&0x7FFFFFFF = elementos, val&0x80000000 = compartidos (bool) |
A continuación, para la cantidad de "elementos", se encuentran pares de clave y valor, uno tras otro, utilizando el mismo formato.
19: Array¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
val&0x7FFFFFFF = elementos, val&0x80000000 = compartidos (bool) |
A continuación, para la cantidad de "elementos", se encuentran los valores uno tras otro, utilizando el mismo formato.
20: PoolByteArray¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Longitud de array (Bytes) |
8..8+longitud |
1 |
Byte |
Byte (0..255) |
Los datos del array son rellenados a 4 bytes.
21: PoolIntArray¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
longitud de array(Enteros) |
8..8+longitud*4 |
4 |
Entero |
Entero con signo de 32 bits |
22: PoolRealArray¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Longitud de array (Flotantes) |
8..8+longitud*4 |
4 |
Entero |
IEEE 754 floatntes de 32-bits |
23: PoolStringArray¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Longitud de array (Cadenas) |
Por cada Cadena:
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
X+0 |
4 |
Entero |
Longitud de la cuerda |
X+4 |
X |
Bytes |
Cadena codificada en UTF-8 |
Cada cadena es rellenada a 4 bytes.
24: PoolVector2Array¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Longitud de la matriz |
8..8+longitud*8 |
4 |
Flotante |
Coordenada X |
8..12+longitud*8 |
4 |
Flotante |
Coordenada Y |
25: PoolVector3Array¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Longitud de la matriz |
8..8+longitud*12 |
4 |
Flotante |
Coordenada X |
8..12+longitud*12 |
4 |
Flotante |
Coordenada Y |
8..16+longitud*12 |
4 |
Flotante |
Coordenada Z |
26: PoolColorArray¶
Ajuste |
Len (longitud) |
Tipo |
Descripción |
---|---|---|---|
4 |
4 |
Entero |
Longitud de la matriz |
8..8+longitud*16 |
4 |
Flotante |
Rojo (generalmente en el rango de 0 a 1, pero puede ser superior a 1 para colores muy brillantes) |
8..12+longitud*16 |
4 |
Flotante |
Verde (generalmente en el rango de 0 a 1, pero puede ser superior a 1 para colores muy brillantes) |
8..16+longitud*16 |
4 |
Flotante |
Azul (generalmente en el rango de 0 a 1, pero puede ser superior a 1 para colores muy brillantes) |
8..20+longitud*16 |
4 |
Flotante |
Alpha (0..1) |