Node Reference
Node Reference - это нода, которая ссылается на файл .node в каталоге проекта, получаемый путем экспорта ноды из мира.
Файл .node обычно содержит предварительно заготовленную ноду (или иерархию нод) со ссылками на все материалы и свойства, а также сконфигурированные физические тела, которые требуются для его визуализации и поведения. Все изменения, внесенные в содержимое Node Reference с помощью UnigineEditor, сохраняются в этом файле.
Node References следует использовать, если в мире размещено много идентичных объектов: в отличие от обычных нод, Node Reference загружаются в мир быстрее благодаря использования внутреннего кэша.
Использование Node Reference позволяет избежать ручного редактирования каждого из идентичных объектов, если вам нужно внести одинаковые изменения во все. Вы можете просто добавить несколько Node References, которые указывают на один файл .node, а затем отредактировать только один Node Reference, чтобы обновить их все. Такой подход позволяет сохранить целостность создаваемых объектов, особенно если они сложные и изощренные.
Например, Node Reference можно использовать для добавления идентичных транспортных средств, персонажей или зданий, которые должны иметь одинаковый внешний вид и поведение и при необходимости сразу обновляться.
Node References поддерживает вложенность, т.е. Node Reference может включать в себя другой Node References, что полезно для реализации сложных решений для создания экземпляров.
В следующем видеоуроке показаны важные моменты, которые необходимо знать о Node Reference:
Важные примечания#
Ссылка на содержимое Node Reference извне#
Node Reference следует рассматривать как контейнер для самодостаточной иерархии нод. При проектировании вашего мира в UnigineEditor избегайте ссылок на ноды, которые хранятся в Node Reference, непосредственно извне (например, при манипулировании нодами через Tracker, создании физических сочленений, указании нод в параметрах компонента или в целевую ноду Player Persecutor), поскольку такие ссылки будут потеряны сразу после перезагрузки мира.
Трансформации#
Трансформации Node Reference не зависят от трансформаций хранимых в ней нод. Таким образом, управляемые логикой и физикой ноды внутри Node Reference не будут оказывать никакого влияния на его прямых дочерних элементов.
В следующем примере движущиеся сгруппированные ноды Node_1 и Node_2 (например, управляемые физикой), содержащиеся в Node Reference, не изменят трансформацию Node Reference и, следовательно, нода DirectChild также не изменит своего положения.
Таким образом, рекомендуется заключить все взаимосвязанные ноды в один Node Reference для обеспечения логической и иерархической целостности.
Смотрите также#
- В статье Instancing Nodes вы узнаете больше об использовании Node References для создания идентичных объектов.
- Класс NodeReference для редактирования Node References через API
- Плагин Randomizer для работы с несколькими Node References
- Видео Node Reference: Важные моменты, демонстрирующие специфику работы с Node Reference
Создание Node Reference#
Есть два способа создать Node Reference с помощью UnigineEditor:
-
Создать Node Reference из ранее созданного .node ассета. В этом случае вам следует сначала экспортировать ноду в файл .node.
- Преобразовать ноду со всеми ее дочерними нодами, присутствующими в иерархии, в Node Reference. В этом случае исходная нода изменит свой тип на Node Reference.
С помощью node-ассета#
- Экспортируйте ноду в файл .node или импортируйте нужный файл .node в проект.
-
Добавьте Node Reference в мир любым из следующих способов:
В меню нажмите Create -> Node -> Reference и выберите нужный ассет .node в открывшемся окне:
Не рекомендуется выбирать контейнер геометрии (.fbx, .dae, .gtlf и т.д.), поскольку изменения, внесенные в его рантайм, не будут сохранены при повторном импорте ассета.- Перетащите ассет .node из окна Asset Browser.
Вы можете повторить шаг 2, чтобы добавить необходимое количество Node References. Или вы можете просто клонировать добавленную ноду.
Путем преобразования существующей ноды#
- Выберите ноду в окне World Nodes Hierarchy (или непосредственно в сцене).
В меню выберите Edit -> Convert to NodeReference (или нажмите Ctrl+Shift+G).
В результате в текущей папке создается новый ассет .node, а исходная нода преобразуется в Node Reference:
Исходная нода, подлежащая преобразованию
|
Преобразованная нода
|
Вы также можете клонировать преобразованную ноду, чтобы получить требуемое количество Node Reference.
Исходные ноды, подлежащие преобразованию
|
Ноды, сгруппированные под Dummy Node, на которые ссылается Node Reference
|
Редактирование Node Reference#
В разделе Reference вкладки Node вы можете заменить исходный ассет ноды на другой или открыть ReferenceNode Editor для редактирования исходной ноды:
Чтобы отредактировать исходную ноду, на который указывает Node Reference:
- Выберите Node Reference в окне World Nodes Hierarchy.
Нажмите Edit на вкладке Node окна Parameters.
Исходная нода появится в окне World Nodes Hierarchy как дочерняя нода Node Reference и может быть отредактирована через окно Parameters.
Окно World Nodes Hierarchy: исходная нода в режиме редактированияОтредактируйте исходную ноду. Например, вы можете изменить примененный к нему материал:
Node Reference с нанесенным красным материаломNode Reference с измененным материаломВы также можете реорганизовать иерархию и заменить исходные ноды, но имейте в виду, что в Node Reference будет сохранен только первую дочернюю ноду, поскольку Node Reference может содержать только один корневой узел.
-
После внесения всех изменений выберите родительскую ноду в окне World Nodes Hierarchy и нажмите Apply, чтобы сохранить изменения в исходной ноде, или Отменить изменения, чтобы сохранить ноды неизменными.
раздел Reference на вкладке Node ссылки на родительскую ноду
Также возможно быстро заменить исходную ноду другой, хранящейся в той же папке. Для этого выберите Node Reference в окне World Nodes Hierarchy или во вьюпорте, удерживайте Shift и используйте колесико мыши или кнопки Page Up и Page Down.
Удаление Node Reference#
Вы можете удалить Node Reference таким же образом, как и любую другую ноду.