Когда и как избежать использования узлов для всего

Узлы дёшевы в производстве, но даже они имеют свои пределы. В проекте могут быть десятки тысяч узлов, которые всё делают. Однако чем сложнее их поведение, тем большее напряжение они вносят в работу проекта.

Godot предоставляет более лёгкие объекты для создания API, которые используют узлы. Обязательно помните об этом как о вариантах при разработке того, как вы хотите построить функции своего проекта.

  1. Object: Максимальный лёгкий объект, исходный объект должен использовать ручное управление памятью. С учётом сказанного, нетрудно создать свои собственные структуры данных, даже структуры узлов, которые также легче, чем класс Node.

    • Пример: Смотрите узел Tree. Он поддерживает высокий уровень настройки для таблицы содержимого с произвольным количеством строк и столбцов. Данные, которые он использует для создания своей визуализации, на самом деле представляют собой дерево объектов TreeItem.

    • Advantages: Simplifying one's API to smaller scoped objects helps improve its accessibility and improve iteration time. Rather than working with the entire Node library, one creates an abbreviated set of Objects from which a node can generate and manage the appropriate sub-nodes.

    Примечание

    С ними нужно быть осторожным. Можно сохранить объект в переменной, но эти ссылки могут стать недействительными без предупреждения. Например, если создатель объекта решит удалить его из ниоткуда, это вызовет состояние ошибки при следующем доступе к нему.

  2. Reference: Немного сложнее, чем Object. Они отслеживают ссылки на самих себя, удаляя загруженную память только в том случае, если больше не существует ссылок на себя. Они полезны в большинстве случаев, когда нужны данные в настраиваемом классе.

    • Пример: Смотрите объект File. Он работает так же, как обычный объект, за исключением того, что его не нужно удалять.

    • Преимущества: такие же, как и у объекта.

  3. Resource: Немного сложнее, чем Reference. У них есть врожденная способность сериализовать/десериализовать (т.е. сохранять и загружать) свойства своих объектов в/из файлов ресурсов Godot.

    • Пример: Scripts, PackedScene (для файлов сцены) и другие типы, например каждый из классов AudioEffect. Каждый из них может быть сохранён и загружен, поэтому они происходят из Resource.

    • Преимущества: Многое уже было сказано о преимуществах :ref:`Resource <class_Resource>`перед традиционными методами хранения данных. Однако в контексте использования ресурсов перед узлами их главное преимущество заключается в совместимости с Inspector. Хотя они почти такие же лёгкие, как Object/Reference, они всё же могут отображать и экспортировать свойства в Inspector. Это позволяет им выполнять задачу, во многом схожую с подузлами с точки зрения удобства использования, но также повышает производительность, если кто-то планирует иметь много таких ресурсов/узлов в своих сценах.