Variant 类

关于

Variant 即可变体,是 Godot 中最重要的数据类型。Variant 在 64 位平台上仅占 24 个字节(32 位平台上则为 20 个字节),几乎可以存储引擎中的所有数据类型。需要长期存在的信息很少会用 Variant 来存储,它的主要用途是数据的通讯、编辑、序列化等对数据进行移动的操作。

Variant 可以:

  • 存储几乎所有数据类型。

  • 针对若干 variant 执行操作(GDScript 使用 Variant 作为原子/原生数据类型)。

  • 求哈希值,与其他可变体值进行快速比较。

  • 用于在数据类型之间安全地转换。

  • 用于抽象调用方法及其参数(Godot 通过 variant 导出所有函数)。

  • 用于推迟调用或在线程之间交换数据.

  • 被序列化为二进制并存储到磁盘, 或通过网络传输.

  • 被序列化为文本, 并将其用于打印值和可编辑的设置.

  • 用作导出的属性, 因此编辑器可以对其进行普通地编辑.

  • 用于字典、数组、解析器等。

基本上, 由于有了Variant类, 编写Godot本身就容易得多, 因为它可以轻松完成C++不常见的高度动态的结构. 今天就成为Variant的朋友吧.

备注

除了 Nil 和 Object 之外,Variant 中的所有类型都不能null,必须始终存储有效值。因此,Variant 中的这些类型被称为不可空类型。

Nil 是一种 Variant 类型,只能存储 null 值。因此,尽管 Nil 和 Object 以外的所有 Variant 类型均不可为空,Variant 仍然可以包含 null 值。

参考

可变体类型列表

Variant 中可以使用这些类型:

类型

注意

Nil(只能存储 null

可空的类型

bool

int

float

String

Vector2

Vector2i

Rect2

2D 版的 AABB

Rect2i

Vector3

Vector3i

Transform2D

Vector4

Vector4i

Plane

Quaternion

AABB

3D 版的 Rect2

Basis

Transform3D

Projection

Color

StringName

NodePath

RID

Object

可空的类型

Callable

Signal

Dictionary

Array

PackedByteArray

PackedInt32Array

PackedInt64Array

PackedFloat32Array

PackedFloat64Array

PackedStringArray

PackedVector2Array

PackedVector3Array

PackedColorArray

PackedVector4Array

容器:Array 和 Dictionary

Both Array and Dictionary are implemented using variants. A Dictionary can match any datatype used as key to any other datatype. An Array just holds an array of Variants. Of course, a Variant can also hold a Dictionary or an Array inside, making it even more flexible.

Modifications to a container will modify all references to it. A Mutex should be created to lock it if multi-threaded access is desired.

参考