Unity 6.3
0 онлайн 78 гостей 3 в системе
Вход

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. If defaultDisplay is 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Определяет пользовательский значок для использования, когда это наложение находится в сжатой форме.
containerWindowEditorWindow накладка содержится внутри.
defaultSizeУстановите defaultSize для определения размера Оверлей, когда он не был изменён пользователем.
displayedПоказывает или скрывает накладку.
displayNameИмя накладки, используемой в качестве заголовка.
floatingВозвращает true, если накладка плавающая, возвращает false, если накладка пришвартована в углу или на панели инструментов.
floatingPositionМестное положение ближайшего угла накладки к ближайшему положению док-станции при плавании.
idОверлей уникальный ID.
isInToolbarВозвращает true, если overlay прикреплен к панели инструментов.
layoutПредпочтительный макет для Оверлей.
maxSizeМаксимальный размер наложения.
minSizeМинимальный размер перекрытия.
rootVisualElementКорень VisualElement.
sizeРазмер наложения.

Открытые методы

Метод Описание
CloseУдалить Оверлей из его OverlayCanvas.
CreateContentСоздает новый файл VisualElement, содержащий содержимое этого Оверлей.
CreatePanelContentИспользуйте этот метод для возврата содержимого визуального элемента.
OnCreatedOnCreated вызывается, когда Оверлей инстанцируется в Оверлей Canvas.
OnWillBeDestroyedВызывается, когда Оверлей собирается быть уничтожен.
RefreshPopupИзмените размер OverlayPopup, чтобы он соответствовал содержанию.
UndockЕсли это наложение сейчас находится на панели инструментов, оно будет с неё удалено и вернётся в плавающее состояние.

Мероприятия

Мероприятие Описание
collapsedChangedВызывается при изменении значения Overlay.collapsed.
displayedChangedЭтот обратный вызов вызывается при изменении значения Overlay.displayed.
floatingChangedВызывается при изменении значения float.
floatingPositionChangedЭто событие вызывает изменение Overlay.floatingPosition.
layoutChangedПодпишитесь на это событие, чтобы получать уведомления при изменении свойства Overlay.Layout.