二进制序列化API

介绍

Godot有一个基于变量的简单序列化API。它用于高效地将数据类型转换为字节数组。此API用于函数 get_varstore_var 属于 文件 以及数据包API PacketPeer . 此格式不用于二进制场景和资源。

数据包规范

数据包设计为始终填充到4个字节。所有值都是小endian编码的。所有数据包都有一个表示整数的4字节头,指定数据类型:

类型

价值

0

无效的

1

布尔

2

整数

3

浮动

4

一串

5

矢量2

6

矩形2

7

矢量3

8

变压器2D

9

飞机

10

夸脱

11

AABB

12

基础

13

转型

14

颜色

15

节点路径

16

摆脱

17

对象

18

词典

19

数组

20

原始数组

21

数组数组

22

实数数组

23

字符串数组

24

矢量2阵列

25

矢量3阵列

26

颜色数组

27

最大值

下面是实际的数据包内容,每种类型的数据包都有所不同:

0:空

1: bool

抵消

伦恩

类型

描述

4

4

整数

0代表假,1代表真

2: int

抵消

伦恩

类型

描述

4

4

整数

有符号,32位整数

三: float 真实的

抵消

伦恩

类型

描述

4

4

浮标

IEE 754 32位浮点

4: String

抵消

伦恩

类型

描述

4

4

整数

字符串长度(字节)

8

X

字节

UTF-8编码字符串

此字段被填充为4个字节。

5: Vector2

抵消

伦恩

类型

描述

4

4

浮标

X坐标

8

4

浮标

Y坐标

6: Rect2

抵消

伦恩

类型

描述

4

4

浮标

X坐标

8

4

浮标

Y坐标

12

4

浮标

X尺寸

16

4

浮标

y尺寸

7: Vector3

抵消

伦恩

类型

描述

4

4

浮标

X坐标

8

4

浮标

Y坐标

12

4

浮标

Z坐标

8: Transform2D

抵消

伦恩

类型

描述

4

4

浮标

[0] [0]

8

4

浮标

[0] [1]

12

4

浮标

[1] [0]

16

4

浮标

[1] [1]

20

4

浮标

[2] [0]

24

4

浮标

[2] [1]

9: Plane

抵消

伦恩

类型

描述

4

4

浮标

标准X

8

4

浮标

正常Y

12

4

浮标

正常Z

16

4

浮标

距离

10: Quat

抵消

伦恩

类型

描述

4

4

浮标

虚X

8

4

浮标

假想Y

12

4

浮标

假想Z

16

4

浮标

真W

11: AABB

抵消

伦恩

类型

描述

4

4

浮标

X坐标

8

4

浮标

Y坐标

12

4

浮标

Z坐标

16

4

浮标

X尺寸

20

4

浮标

y尺寸

24

4

浮标

Z大小

12: Basis

抵消

伦恩

类型

描述

4

4

浮标

[0] [0]

8

4

浮标

[0] [1]

12

4

浮标

[0] [2]

16

4

浮标

[1] [0]

20

4

浮标

[1] [1]

24

4

浮标

[1] [2]

28

4

浮标

[2] [0]

32

4

浮标

[2] [1]

36

4

浮标

[2] [2]

13: Transform

抵消

伦恩

类型

描述

4

4

浮标

[0] [0]

8

4

浮标

[0] [1]

12

4

浮标

[0] [2]

16

4

浮标

[1] [0]

20

4

浮标

[1] [1]

24

4

浮标

[1] [2]

28

4

浮标

[2] [0]

32

4

浮标

[2] [1]

36

4

浮标

[2] [2]

40

4

浮标

[3] [0]

44

4

浮标

[3] [1]

48

4

浮标

[3] [2]

14: Color

抵消

伦恩

类型

描述

4

4

浮标

红色(0..1)

8

4

浮标

绿色(0..1)

12

4

浮标

蓝色(0..1)

16

4

浮标

α(0..1)

15: NodePath

抵消

伦恩

类型

描述

4

4

整数

字符串长度或新格式(VAL&0x8000000!=0,名称计数=val&0x7fffffff)

对于旧格式:

抵消

伦恩

类型

描述

8

X

字节

UTF-8编码字符串

填充到4个字节。

对于新格式:

抵消

伦恩

类型

描述

4

4

整数

子名称计数

8

4

整数

标志(绝对:VAL&1!= 0)

对于每个名称和子名称

抵消

伦恩

类型

描述

X+ 0

4

整数

字符串长度

X+ 4

X

字节

UTF-8编码字符串

每个名称字符串都被填充到4个字节。

16: RID (不支持)

17: Object (不支持)

18: Dictionary

抵消

伦恩

类型

描述

4

4

整数

val&0x7fffffff=元素,val&0x8000000=共享(bool)

接下来是,对于“元素”的数量,使用相同格式的键和值对,一对接一对。

19: Array

抵消

伦恩

类型

描述

4

4

整数

val&0x7fffffff=元素,val&0x8000000=共享(bool)

接下来是,对于“元素”的数量,使用相同的格式,值一个接一个。

20: PoolByteArray

抵消

伦恩

类型

描述

4

4

整数

数组长度(字节)

8..8+length

1

字节

字节(0..255)

数组数据被填充到4个字节。

21: PoolIntArray

抵消

伦恩

类型

描述

4

4

整数

数组长度(整数)

8..8+length*4

4

整数

32位有符号整数

22: PoolRealArray

抵消

伦恩

类型

描述

4

4

整数

数组长度(浮点数)

8..8+length*4

4

整数

32位IEE 754浮点

23: PoolStringArray

抵消

伦恩

类型

描述

4

4

整数

数组长度(字符串)

对于每个字符串:

抵消

伦恩

类型

描述

X+ 0

4

整数

字符串长度

X+ 4

X

字节

UTF-8编码字符串

每个字符串被填充到4个字节。

24: PoolVector2Array

抵消

伦恩

类型

描述

4

4

整数

数组长度

8..8+length*8

4

浮标

X坐标

8..12+length*8

4

浮标

Y坐标

25: PoolVector3Array

抵消

伦恩

类型

描述

4

4

整数

数组长度

8..8+length*12

4

浮标

X坐标

8..12+length*12

4

浮标

Y坐标

8..16+length*12

4

浮标

Z坐标

26: PoolColorArray

抵消

伦恩

类型

描述

4

4

整数

数组长度

8..8+length*16

4

浮标

红色(0..1)

8..12+length*16

4

浮标

绿色(0..1)

8..16+length*16

4

浮标

蓝色(0..1)

8..20+length*16

4

浮标

α(0..1)