--- title: GUI-нода Templates brief: This manual explains the Defold GUI template system that is used to create reusable visual GUI components based on shared templates or 'prefabs'. --- # GUI-нода Templates GUI-нода Template предоставляет мощный механизм для создания многократно используемых компонентов GUI на основе общих шаблонов или "префабов". В этом руководстве объясняется, что это за функция и как ее использовать. GUI-шаблон --- это GUI-сцена, которая инстанцируется, нода за нодой, в другую GUI-сцену. Любые значения свойств нод исходного шаблона могут быть переопределены. ## Создание шаблона GUI-шаблон --- это обычная GUI-сцена, поэтому он создается так же, как и любая другая GUI-сцена. Кликните ПКМ в каком-либо расположении в панели *Assets* и выберите New... ▸ Gui. ![Create template](images/gui-templates/create.png) Создайте шаблон и сохраните его. Следует заметить, что ноды экземпляра будут располагаться относительно начала координат, поэтому целесообразно создать шаблон в позиции 0, 0, 0. ## Создание экземпляров из шаблона На основе образца можно создать любое количество экземпляров. Создайте или откройте GUI-сцену, в которой нужно разместить шаблон, затем кликните ПКМ в секции *Nodes* в *Outline* и выберите Add ▸ Template. ![Create instance](images/gui-templates/create_instance.png) Задайте свойству *Template* файл шаблона GUI-сцены. Можно добавить любое количество шаблонных экземпляров, и для каждого экземпляра можно переопределить свойства каждой ноды и изменить позицию, цвет, размер, текстуру и так далее. ![Instances](images/gui-templates/instances.png) Любое свойство, которое вы измените, будет отмечено синим цветом в редакторе. Нажмите кнопку сброса рядом со свойством, чтобы установить его значение в значение из шаблона: ![Properties](images/gui-templates/properties.png) Любая нода, имеющая переопределенные свойства, также окрашивается в синий цвет в *Outline*: ![Outline](images/gui-templates/outline.png) Экземпляр шаблона отображается в виде сворачиваемой записи в представлении *Outline*. Однако важно отметить, что этот элемент в Outline *не является нодой*. Экземпляр шаблона также не существует в рантайме, но все ноды, которые являются частью этого экземпляра, существуют. Ноды, являющиеся частью экземпляра шаблона, автоматически именуются с префиксом и слэшем (`"/"`), прикрепленным к их *Id*. Префикс --- это *Id*, установленный в экземпляре шаблона. ## Изменение шаблонов в рантайме Скрипты, которые манипулируют или запрашивают ноды, добавленные через механизм шаблонов, должны учитывать только именование нод экземпляра и включать *Id* экземпляра шаблона в качестве префикса имени ноды: ```lua if gui.pick_node(gui.get_node("button_1/button"), x, y) then -- Какие-либо действия... end ``` Не существует ноды, соответствующей самому экземпляру шаблона. Если требуется корневая нода для экземпляра, добавьте ее в шаблон. Если скрипт связан со GUI-сценой шаблона, он не является частью дерева нод экземпляра. Можно прикрепить один единственный скрипт к каждой GUI-сцене, чтобы логика скрипта располагалась в GUI-сцене, в которую инстанцируются шаблоны.