API бінарної серіалізації¶
Вступ¶
Godot має простий API серіалізації на основі Variant. Він використовується для ефективного перетворення типів даних у масив байтів. Цей API використовується в функціях get_var
і store_var
з File, а також API пакетів для PacketPeer. Цей формат не використовується для бінарних сцен і ресурсів.
Специфікація пакетів¶
The packet is designed to be always padded to 4 bytes. All values are little-endian-encoded. All packets have a 4-byte header representing an integer, specifying the type of data.
Для визначення типу використовуються найнижчі значення двох байтів, тоді як найбільше значення двох байтів містить мітки:
base_type = val & 0xFFFF;
flags = val >> 16;
Тип |
Значення |
---|---|
0 |
нуль |
1 |
bool |
2 |
ціле число |
3 |
десяткове число |
4 |
текст |
5 |
vector2 |
6 |
rect2 |
7 |
vector3 |
8 |
transform2d |
9 |
площина |
10 |
quat |
11 |
aabb |
12 |
basis |
13 |
3д перетворення |
14 |
колір |
15 |
шлях вузла |
16 |
rid |
17 |
об'єкт |
18 |
словник |
19 |
масив |
20 |
необроблений масив |
21 |
масив з цілих чисел |
22 |
real array |
23 |
масив з текстів |
24 |
масив з vector2 |
25 |
масив з vector3 |
26 |
масив з кольорів |
27 |
макс. |
Following this is the actual packet contents, which varies for each type of
packet. Note that this assumes Godot is compiled with single-precision floats,
which is the default. If Godot was compiled with double-precision floats, the
length of "Float" fields within data structures should be 8, and the offset
should be (offset - 4) * 2 + 4
. The "float" type itself always uses double
precision.
0: нуль¶
1: bool¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
0 для False, 1 для True |
2: цілі числа (int)¶
Якщо мітки не встановлені (flags == 0), ціле число надсилається як 32-розрядне ціле число:
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Ціле число помічене, як 32-розрядне |
Якщо встановлена мітка ENCODE_FLAG_64
(flags & 1 == 1
), ціле число надсилається, як 64-розрядне ціле число:
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
8 |
Integer (ціле) |
Ціле число відмічене, як 64-розрядне |
3: десяткові¶
If no flags are set (flags == 0), the float is sent as a 32 bit single precision:
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Десяткове число одинарної точності стандарту IEEE 754 |
Якщо встановлена мітка ENCODE_FLAG_64
(flags & 1 == 1
), десяткове число надсилається, як 64 - розрядне десяткове число подвійної точності:
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
8 |
Float |
Десяткове число подвійної точності стандарту IEEE 754 |
4: String¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина тексту (в байтах) |
8 |
X |
Байти |
Текст закодований в UTF-8 |
Це поле вміщує до 4 байт.
5: Vector2¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Координата X |
8 |
4 |
Float |
Координата Y |
6: Rect2¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Координата X |
8 |
4 |
Float |
Координата Y |
12 |
4 |
Float |
Розмір по X |
16 |
4 |
Float |
Розмір по Y |
7: Vector3¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Координата X |
8 |
4 |
Float |
Координата Y |
12 |
4 |
Float |
Координата Z |
8: Transform2D¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Компонент X вектора стовпця X, доступ до якого здійснюється через [0][0] |
8 |
4 |
Float |
Компонент Y вектора стовпця X, доступ до якого здійснюється через [0][1] |
12 |
4 |
Float |
Компонент X вектора стовпця Y, доступ до якого здійснюється через [1][0] |
16 |
4 |
Float |
Компонент Y вектора стовпця Y, доступ до якого здійснюється через [1][1] |
20 |
4 |
Float |
Компонент X оригінального вектора, доступ до якого здійснюється через [2][0] |
24 |
4 |
Float |
Компонент Y оригінального вектора, доступ до якого здійснюється через [2][1] |
9: Plane¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Нормаль по осі X |
8 |
4 |
Float |
Нормаль по осі Y |
12 |
4 |
Float |
Нормаль по осі Z |
16 |
4 |
Float |
Відстань |
10: Quat¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Imaginary X |
8 |
4 |
Float |
Imaginary Y |
12 |
4 |
Float |
Imaginary Z |
16 |
4 |
Float |
Real W |
11: AABB¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Координата X |
8 |
4 |
Float |
Координата Y |
12 |
4 |
Float |
Координата Z |
16 |
4 |
Float |
Розмір по X |
20 |
4 |
Float |
Розмір по Y |
24 |
4 |
Float |
Розмір по Z |
12: Basis¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Компонент X вектора стовпця X, доступ до якого здійснюється через [0][0] |
8 |
4 |
Float |
Компонент Y вектора стовпця X, доступ до якого здійснюється через [0][1] |
12 |
4 |
Float |
Компонент Z вектора стовпця X, доступ до якого здійснюється через [0][2] |
16 |
4 |
Float |
Компонент X вектора стовпця Y, доступ до якого здійснюється через [1][0] |
20 |
4 |
Float |
Компонент Y вектора стовпця Y, доступ до якого здійснюється через [1][1] |
24 |
4 |
Float |
Компонент Z вектора стовпця Y, доступ до якого здійснюється через [1][2] |
28 |
4 |
Float |
X компонент вектора стовпця Z, доступ до якого здійснюється через [2][0] |
32 |
4 |
Float |
Компонент Y вектора стовпця Z, доступ до якого здійснюється через [2][1] |
36 |
4 |
Float |
Компонент Z вектора стовпця Z, доступ до якого здійснюється через [2][2] |
13: Transform¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Компонент X вектора стовпця X, доступ до якого здійснюється через [0][0] |
8 |
4 |
Float |
Компонент Y вектора стовпця X, доступ до якого здійснюється через [0][1] |
12 |
4 |
Float |
Компонент Z вектора стовпця X, доступ до якого здійснюється через [0][2] |
16 |
4 |
Float |
Компонент X вектора стовпця Y, доступ до якого здійснюється через [1][0] |
20 |
4 |
Float |
Компонент Y вектора стовпця Y, доступ до якого здійснюється через [1][1] |
24 |
4 |
Float |
Компонент Z вектора стовпця Y, доступ до якого здійснюється через [1][2] |
28 |
4 |
Float |
X компонент вектора стовпця Z, доступ до якого здійснюється через [2][0] |
32 |
4 |
Float |
Компонент Y вектора стовпця Z, доступ до якого здійснюється через [2][1] |
36 |
4 |
Float |
Компонент Z вектора стовпця Z, доступ до якого здійснюється через [2][2] |
40 |
4 |
Float |
Компонент X оригінального вектора, доступ до якого здійснюється через [3][0] |
44 |
4 |
Float |
Компонент Y оригінального вектора, доступ до якого здійснюється через [3][1] |
48 |
4 |
Float |
Компонент Z оригінального вектора, доступ до якого здійснюється через [3][2] |
14: Color¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Float |
Червоний (зазвичай 0..1, може бути вище 1 для дуже яскравих кольорів) |
8 |
4 |
Float |
Зелений (як правило, 0..1, може бути вище 1 для дуже яскравих кольорів) |
12 |
4 |
Float |
Синій (зазвичай 0..1, може бути вище 1 для дуже яскравих кольорів) |
16 |
4 |
Float |
Альфа (0..1) |
15: NodePath¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина тексту, або новий формат (val&0x80000000!=0 і NameCount=val&0x7FFFFFFF) |
Для старого формату:¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
8 |
X |
Байти |
Текст закодований в UTF-8 |
Вміщає до 4 байт.
Для нового формату:¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Кількість під-імен |
8 |
4 |
Integer (ціле) |
Мітки (абсолютні: val&1 != 0 ) |
Для кожного Імені та Під-Імені
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
X+0 |
4 |
Integer (ціле) |
Довжина тексту |
X+4 |
X |
Байти |
Текст закодований в UTF-8 |
Кожний текст імені вкладається в 4 байти.
16: RID (не підтримується)¶
17: Object не підтримується)¶
18: Dictionary¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool) |
Відповідно вся кількість "елементів", пар ключа і значення, один за одним використовують той самий формат.
19: Array¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool) |
Відповідно, для кількості "елементів", значень один за одним, використовується той самий формат.
20: PoolByteArray¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина масиву (Байти) |
8..8+довжина |
1 |
Байт |
Байт (0..255) |
Дані масиву вкладаються в 4 байти.
21: PoolIntArray¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина масиву (цілі числа) |
8..8+довжина*4 |
4 |
Integer (ціле) |
Ціле число помічене, як 32-розрядне |
22: PoolRealArray¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина масиву (Десяткові числа) |
8..8+довжина*4 |
4 |
Integer (ціле) |
32-розрядне десяткове число формату IEEE 754 |
23: PoolStringArray¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина масиву (Текст) |
Для кожного Тексту:
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
X+0 |
4 |
Integer (ціле) |
Довжина тексту |
X+4 |
X |
Байти |
Текст закодований в UTF-8 |
Кожен текст вкладається в 4 байти.
24: PoolVector2Array¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина масиву |
8..8+довжина*8 |
4 |
Float |
Координата X |
8..12+довжина*8 |
4 |
Float |
Координата Y |
25: PoolVector3Array¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина масиву |
8..8+довжина*12 |
4 |
Float |
Координата X |
8..12+довжина*12 |
4 |
Float |
Координата Y |
8..16+довжина*12 |
4 |
Float |
Координата Z |
26: PoolColorArray¶
Зміщення |
Довжина |
Тип |
Опис |
---|---|---|---|
4 |
4 |
Integer (ціле) |
Довжина масиву |
8..8+довжина*16 |
4 |
Float |
Червоний (зазвичай 0..1, може бути вище 1 для дуже яскравих кольорів) |
8..12+довжина*16 |
4 |
Float |
Зелений (як правило, 0..1, може бути вище 1 для дуже яскравих кольорів) |
8..16+довжина*16 |
4 |
Float |
Синій (зазвичай 0..1, може бути вище 1 для дуже яскравих кольорів) |
8..20+довжина*16 |
4 |
Float |
Альфа (0..1) |