Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Панель представляет собой видимый экземпляр UI(пользовательский интерфейс). Позволяет пользователю взаимодействовать с вашим приложением. Подробнее
См. в иерархии Словарь
. Он обрабатывает диспетчеризацию событий поведения элементов в иерархии визуального дерева. Он содержит ссылку на корневой визуальный элемент иерархии. Для пользовательского интерфейса во время выполнения его можно сравнить с Canvas в UGUI.

Вы должны прикрепить экземпляр визуального элемента к панели, чтобы он отображал или получал события.

События панели запускаются для визуального элемента при изменении его связи с панелью. Например, когда вы добавляете визуальный элемент на панель (AttachToPanelEvent) или удаляете его с панели (DetachFromPanelEvent).

События панели отправляются только тем визуальным элементам и их потомкам в иерархии, на которые непосредственно влияют изменения панели. Родительские элементы не получают событий, когда дочерние визуальные элементы присоединяются к панели или отсоединяются от нее.

Например, в приведенном ниже коде UXML при добавлении визуального элемента parent в иерархию, которая уже прикреплена к панели, parent , дочерний и внучатый получают одно и то же событие. Если вы удалите parent из той же иерархии UXML, все визуальные элементы будут получать события DetachFromPanel.

<ui:UXML xmlns:ui="UnityEngine.UIElements" xmlns:uie="UnityEditor.UIElements"> <ui:VisualElement name="parent"> <ui:VisualElement name="child"> <ui:VisualElement name="grandchild" /> </ui:VisualElement> </ui:VisualElement> </ui:UXML>

Базовым классом для всех событий панели является PanelChangedEventBase.

Событие Описание Стекает вниз Пузыри вверх Отменяемый
AttachToPanelEvent Отправляется сразу после прикрепления элемента (или одного из его родителей) к панели.
DetachFromPanelEvent Отправляется непосредственно перед тем, как элемент (или один из его родителей) будет отсоединен от панели.

Уникальные свойства

originPanel: originPanel содержит данные, относящиеся к DetachFromPanelEvent. Он содержит исходную панель, от которой визуальный элемент отделяется во время смены панели.

destinationPanel: destinationPanel содержит данные, относящиеся к AttachFromPanelEvent. Он предоставляет панель, к которой теперь прикреплен визуальный элемент.

Список событий

В следующем списке указаны имя, описание и цель каждого события в семействе событий. Дополнительную информацию о мероприятии см. в API инструментария пользовательского интерфейса.

AttachToPanelEvent

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

target: визуальный элемент, прикрепленный к панели.

Событие отсоединения от панели

Событие DetachFromPanelEvent срабатывает перед удалением визуального элемента с панели. Это также происходит, когда вы удаляете визуальный элемент из иерархии, прикрепленной к панели.

target: визуальный элемент, который отделяется от панели.

Примеры

В следующем примере создается окно редактора с кнопкой, которая добавит в окно дополнительные метки. Если щелкнуть ярлыки, они снова будут удалены.

В этом примере реализован настраиваемый класс меток, который выводит сообщение на консоль всякий раз, когда экземпляр VisualElement прикрепляется к панели или отсоединяется от нее. В нем рассказывается о поведении событий AttachToPanelEvent и DetachFromPanelEvent и о том, как использовать свойства originPanel и destinationPanel.

Чтобы увидеть пример в действии, сделайте следующее:

  1. В разделе Активы > Скрипты > Редактор, создайте сценарий C# с именем PanelEventsTestWindow.
  2. Скопируйте пример кода в скрипт C#.
  3. На панели инструментов редактора выберите Окно > Инструментарий пользовательского интерфейса > Окно тестирования событий панели.
using UnityEditor; using UnityEngine; using UnityEngine.UIElements; public class PanelEventsTestWindow : EditorWindow { [MenuItem("Window/UI Toolkit/Panel Events Test Window")] public static void ShowExample() { PanelEventsTestWindow wnd = GetWindow<PanelEventsTestWindow>(); wnd.titleContent = new GUIContent("Panel Events Test Window"); } public void CreateGUI() { // Set a name for the panel rootVisualElement.panel.visualTree.name = "Our Window Root Visual Element"; // Add a button which will add new instances of our custom labels to the window rootVisualElement.Add(new Button(() => rootVisualElement.Add(new CustomLabel())) { text = "Add New Label" }); } } /// <summary> /// Custom label class which prints out a console message when it is attached or detached. /// </summary> public class CustomLabel : Label { private static int m_InstanceCounter = 0; private int m_LabelNumber; public CustomLabel() : base() { m_LabelNumber = ++m_InstanceCounter; text = $"Label #{m_LabelNumber} - click me to detach"; RegisterCallback<AttachToPanelEvent>(evt => { Debug.Log($"I am label {m_LabelNumber} and I " + $"just got attached to panel '{evt.destinationPanel.visualTree.name}'"); }); RegisterCallback<DetachFromPanelEvent>(evt => { Debug.Log($"I am label {m_LabelNumber} and I " + $"just got detached from panel '{evt.originPanel.visualTree.name}'"); }); // Register a pointer down callback that removes this element from the hierarchy RegisterCallback<PointerDownEvent>(evt => this.RemoveFromHierarchy()); } }
Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3