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

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

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

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

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

    Примечание

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

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

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

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