Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Variant 类

关于

Variant 是 Godot 中最重要的数据类型, 也是引擎中最重要的类.Variant仅占用20个字节, 并且几乎可以在其中存储任何引擎数据类型.Variant 很少用于长时间保存信息, 而主要用于通信, 编辑, 序列化和移动数据.

一个Variant可以:

  • 存储几乎所有数据类型

  • 在许多Variant对象之间执行操作(GDScript使用Variant作为其原子/原生数据类型).

  • 被散列, 因此可以快速将其与其他Variant对象进行比较

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

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

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

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

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

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

  • 用于字典, 数组, 解析器等.

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

参考:

容器:Dictionary 和 Array

他们都是使用 Variant 实现的。Dictionary(字典)可以将用作键的任何数据类型与任何其他数据类型进行匹配。Array(数组)包含 Variant 数组。当然,Variant 可以在内部再容纳一个 Dictionary 和一个 Array,从而使其更加灵活。

对容器的修改将修改对该容器的所有引用. 如果需要多线程访问, 则应创建一个互斥锁以将其锁定.

Godot 3.0 删除了对容器的写时拷贝(COW)模式支持.

参考: