Overlay
класс в UnityEditor.Overlays
Описание
Оверлей — это постоянные и настраиваемые панели и панели инструментов, которые доступны в Редакторе Windows. Используйте Оверлей для вывода действий и параметров инструментов удобным и управляемым пользователем способом.
Это базовый класс, от которого наследуются все оверлеи. Чтобы создать оверлей, верните UnityEngine.UIElements.VisualElement.
Самый простой способ отображения наложения — это использование OverlayAttribute и зарегистрировать цель EditorWindow.
using UnityEditor; using UnityEditor.Overlays; using UnityEngine.UIElements;
// Specifying `OverlayAttribute.editorWindowType` tells the OverlayCanvas to always show this Overlay in the menu. [Overlay(typeof(SceneView), "Selection Count")] class SelectionCount : Overlay { Label m_Label;
public override VisualElement CreatePanelContent() { Selection.selectionChanged += () => { if (m_Label != null) m_Label.text = $"Selection Count {Selection.count}"; };
return m_Label = new Label($"Selection Count {Selection.count}"); } }
Оверлей можно использовать в любом EditorWindow, реализующем ISupportsOverlays. Вы можете использовать OverlayCanvas.Add и OverlayCanvas.Remove для добавления и удаления оверлей из меню Оверлей.
using System; using UnityEditor; using UnityEditor.Overlays; using UnityEngine; using UnityEngine.UIElements;
public class OverlayWindowExample : EditorWindow, ISupportsOverlays { bool m_ShowOverlay; InstanceOverlay m_Overlay;
// InstanceOverlay is not registered as a persistent overlay, and it must be instantiated through code. In contrast, // PersistentOverlay is registered with a target window type and will be available at any time. // All OverlayAttribute properties are optional. Here, we specify that when this overlay is added to a window for the // first time, so it is visible by default. IfdefaultDisplayis set to it's default value of false, the // Overlay will be available in the Overlay Menu when added to a window, but not visible. [Overlay(defaultDisplay = true)] class InstanceOverlay : Overlay { OverlayWindowExample m_Window; public InstanceOverlay(OverlayWindowExample win) => m_Window = win; public override VisualElement CreatePanelContent() => new Label() { text = $"Hello from {m_Window.name}!" }; }
// Persistent overlays are always available in the Overlay Menu. An Overlay is made persistent by assigning the // `editorWindowType` property in `OverlayAttribute`. [Overlay(typeof(OverlayWindowExample), "Persistent Overlay", defaultDisplay = true)] class PersistentOverlay : Overlay { public override VisualElement CreatePanelContent() => new Label() { text = "Hello, I'm always available!" }; }
[MenuItem("Window/Overlay Window")] static void Init() => GetWindow<OverlayWindowExample>();
void OnEnable() => m_Overlay = new InstanceOverlay(this);
void OnGUI() { EditorGUI.BeginChangeCheck(); m_ShowOverlay = EditorGUILayout.Toggle("Show Overlay", m_ShowOverlay); if (EditorGUI.EndChangeCheck()) { if (m_ShowOverlay) overlayCanvas.Add(m_Overlay); else overlayCanvas.Remove(m_Overlay); } } }
Накладки могут быть показаны в активных SceneView через SceneView.AddOverlayToActiveView и SceneView.RemoveOverlayFromActiveView. Это полезно для EditorTool, которые должны показать UI.
using System.Linq; using UnityEngine; using UnityEditor; using UnityEditor.EditorTools; using UnityEditor.Overlays; using UnityEngine.UIElements;
// A simple tool that moves the selected transforms using an Overlay interface. [EditorTool("Offset", typeof(Transform))] public class OffsetTool : EditorTool { // By default, overlays added to the canvas are not displayed. Setting the `defaultDisplay` property ensures that the // first time this Overlay is added to a canvas it will be visible. [Overlay(defaultDisplay = true)] class OffsetToolOverlay : Overlay { Transform[] selection;
public OffsetToolOverlay(Transform[] targets) => selection = targets;
public override VisualElement CreatePanelContent() { var root = new VisualElement(); root.Add(new Button(() => Move(Vector3.right)) { text = "Move Right" }); root.Add(new Button(() => Move(Vector3.up)) { text = "Move Up" }); root.Add(new Button(() => Move(Vector3.forward)) { text = "Move Forward" }); return root; }
void Move(Vector3 direction) { Undo.RecordObjects(selection, "Move Selection"); foreach (var transform in selection) transform.position += direction; } }
OffsetToolOverlay m_Overlay;
public override void OnActivated() { SceneView.AddOverlayToActiveView(m_Overlay = new OffsetToolOverlay(targets.Select(x => x as Transform).ToArray())); }
public override void OnWillBeDeactivated() { SceneView.RemoveOverlayFromActiveView(m_Overlay); } }
Чтобы создать Оверлей, который можно прикрепить к панели инструментов, см. ToolbarOverlay.
Статические свойства
| Свойство | Описание |
|---|---|
| ussClassName | Имя USS-класса для элементов этого типа. |
Свойства
| Свойство | Описание |
|---|---|
| collapsed | Определяет, находится ли накладка в свернутой форме. |
| collapsedIcon | Определяет пользовательский значок для использования, когда это наложение находится в сжатой форме. |
| containerWindow | EditorWindow накладка содержится внутри. |
| defaultSize | Установите defaultSize для определения размера Оверлей, когда он не был изменён пользователем. |
| displayed | Показывает или скрывает накладку. |
| displayName | Имя накладки, используемой в качестве заголовка. |
| floating | Возвращает true, если накладка плавающая, возвращает false, если накладка пришвартована в углу или на панели инструментов. |
| floatingPosition | Местное положение ближайшего угла накладки к ближайшему положению док-станции при плавании. |
| id | Оверлей уникальный ID. |
| isInToolbar | Возвращает true, если overlay прикреплен к панели инструментов. |
| layout | Предпочтительный макет для Оверлей. |
| maxSize | Максимальный размер наложения. |
| minSize | Минимальный размер перекрытия. |
| rootVisualElement | Корень VisualElement. |
| size | Размер наложения. |
Открытые методы
| Метод | Описание |
|---|---|
| Close | Удалить Оверлей из его OverlayCanvas. |
| CreateContent | Создает новый файл VisualElement, содержащий содержимое этого Оверлей. |
| CreatePanelContent | Используйте этот метод для возврата содержимого визуального элемента. |
| OnCreated | OnCreated вызывается, когда Оверлей инстанцируется в Оверлей Canvas. |
| OnWillBeDestroyed | Вызывается, когда Оверлей собирается быть уничтожен. |
| RefreshPopup | Измените размер OverlayPopup, чтобы он соответствовал содержанию. |
| Undock | Если это наложение сейчас находится на панели инструментов, оно будет с неё удалено и вернётся в плавающее состояние. |
Мероприятия
| Мероприятие | Описание |
|---|---|
| collapsedChanged | Вызывается при изменении значения Overlay.collapsed. |
| displayedChanged | Этот обратный вызов вызывается при изменении значения Overlay.displayed. |
| floatingChanged | Вызывается при изменении значения float. |
| floatingPositionChanged | Это событие вызывает изменение Overlay.floatingPosition. |
| layoutChanged | Подпишитесь на это событие, чтобы получать уведомления при изменении свойства Overlay.Layout. |