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

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

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

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

    • 示例:参见 Tree 节点。它支持对,具有任意行数和列数的内容表,进行高级定制。用来生成可视化的数据实际上是 TreeItem 对象的树。
    • 优势:将API简化为更小的作用域对象,有助于提升其可访问性,改进迭代时间。而不是使用整个节点库,一种方法是创建一组简短的 Object,节点可以从中生成和管理适当的子节点。

    注解

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

  2. Reference:只比 Object 稍微复杂一点。它们追踪对自己的引用,只有在不再存在对其本身的引用时,才删除已加载的内存。在需要自定义类中的数据的大多数情况下,这些都很有用。

    • 示例:参见 File 对象。它的功能就像普通 Object 一样,只是不需要人们自己删除它。
    • 优势:与 Object 相同。
  3. Resource:只比 Reference 稍微复杂一点。它们天然具有将其对象属性,序列化/反序列化(即保存和加载),到/从Godot资源文件的能力。

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