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(只能存储 |
可空的类型 |
2D 版的 AABB |
|
3D 版的 Rect2 |
|
可空的类型 |
|
容器: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.