何时以及如何避免为任何事情使用节点

节点产生成本低廉, 但是它们也有一定的局限性. 一个项目可能有成千上万个节点在做所有事情. 他们的行为越复杂, 每个节点对项目性能增加的压力就越大.

Godot为创建节点使用的API, 提供了更轻量级的对象. 在设计如何构建项目的特性时, 请务必将这些作为选项牢记在心.

  1. Object: 终极轻量级对象, 原始对象必须使用手动内存管理. 尽管如此, 创建自己的自定义数据结构并不难, 甚至于节点结构, 也比 Node 类更轻.

    • 示例 : 参见 Tree 节点. 它支持对, 具有任意行数和列数的内容表, 进行高级定制. 用来生成可视化的数据实际上是 TreeItem 对象的树.

    • 优点: 将一个人的API简化为较小范围的对象, 有助于提高其可访问性, 改善迭代时间. 与其使用整个Node库, 不如创建一组简略的Objects, 节点可以从这些Objects中生成和管理相应的子节点.

    注解

    处理它们时要小心. 可以将 Object 存储到变量中, 但是这些引用可能在没有警告的情况下失效. 例如, 如果对象的创建者决定删除它, 这将在下一次访问时, 触发错误状态.

  2. Reference: 只比Object更复杂一点. 它们跟踪对自己的引用, 只有当对自己没有另外的引用存在时, 才会删除加载的内存. 在大多数需要在自定义类中获取数据的情况下, 很有用.

    • 示例 参见 File 对象. 它的功能就像普通 Object 一样, 只是不需要人为删除它.

    • 优势:Object 相同.

  3. Resource: 只比 Reference 稍微复杂一点. 它们天然具有将其对象属性, 序列化和反序列化Godot资源文件的能力(即保存和加载).

    • 示例 : 脚本, PackedScene (用于场景文件), 以及其他类型, 比如 AudioEffect 类. 每一个都可以保存和加载, 因此它们从 Resource 扩展.

    • 优势 : 关于 Resource 与传统数据存储方法相比的优势, 已经说了 很多. 然而, 通过 Node 使用 Resource 的上下文, 它们的主要优点是在属性检查器的兼容性方面. 虽然几乎和 Object/Reference 一样轻量级, 它们仍然可以在属性检查器中显示和导出属性. 这使他们可以实现, 与可用性方面的子节点非常相似的目的, 而且如果计划在其场景中, 拥有许多此类 Resource/Node, 还可以提高性能.