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.
Checking the stable version of the documentation...
何时以及如何避免为任何事情使用节点
虽然节点的创建成本很低,但是它们也有一定的局限性。一个项目可能有成千上万个节点,都各自在做事情。每个节点的行为越复杂,对项目性能增加的压力就越大。
Godot 为创建节点使用的 API 提供了更轻量级的对象。在设计如何构建项目的特性时,请务必将这些作为选项牢记在心。
Object:终极轻量级对象,原始的 Object 必须使用手动内存管理。尽管如此,创建自己的自定义数据结构——甚至是节点结构——也并不难,并且比 Node 类更轻量。
示例:参见 Tree 节点。它支持对具有任意行数和列数的内容表,进行高级定制。用来生成可视化的数据实际上是 TreeItem 对象的树。
优势: 将 API 简化为较小范围的对象,有助于提高其可访问性、改善迭代时间。与其使用整个 Node 库,不如创建一组简略的 Object,节点可以从这些 Object 中生成和管理相应的子节点。
备注
处理它们时要小心. 可以将
Object
存储到变量中, 但是这些引用可能在没有警告的情况下失效. 例如, 如果对象的创建者决定删除它, 这将在下一次访问时, 触发错误状态.RefCounted:只比 Object 稍微复杂一点。它们会记录对自己的引用,只有当对自己没有另外的引用存在时,才会删除加载的内存。在大多数需要在自定义类中存取数据的情况下,很有用。
示例:见 FileAccess 对象。它的功能就像普通 Object 一样,只是不需要人为删除。
优势: 与
Object
相同.
Resource :只比 RefCounted 稍微复杂一点。它们天然具有将其对象属性序列化(即保存)到 Godot 资源文件,或从 Godot 资源文件中反序列化(即加载)的能力。
示例 : 脚本,
PackedScene
(用于场景文件), 以及其他类型, 比如 AudioEffect 类. 每一个都可以保存和加载, 因此它们均是从Resource
继承而来的.优势:关于 Resource 与传统数据存储方法相比的优势已经说了 很多。然而,在使用 Resource 替代 Node 的情境下,Resource 的主要优点是与检查器的兼容性。虽然几乎和 Object/Reference 一样轻量,它们仍然可以在检查器中显示并导出属性。这使它们在易用性上,可以媲美使用子节点的方式,而且如果有人计划在其场景中包含许多这类 Resource/Node,它们还可以提高性能。