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

MainToolbarElementAttribute

класс в UnityEditor.Toolbars

Описание

Регистрирует статический метод, с помощью которого можно дополнить главную панель инструментов собственными элементами интерфейса.

Методы, помеченные этим атрибутом, возвращают MainToolbarElement или один из его дочерних типов. Также можно возвращать IEnumerable из MainToolbarElement для группирования нескольких элементов вместе (см. пример ниже). Каждый MainToolbarElement описывает содержание и поведение элемента панели инструментов, а главная панель инструментов запрашивает эти методы, когда ей нужно создать или обновить элементы панели инструментов.

Дополнительные ресурсы: MainToolbarButton, MainToolbarToggle, MainToolbarDropdown, MainToolbarSlider, MainToolbarLabel.

using System.Collections.Generic;
using UnityEditor;
using UnityEditor.Toolbars;
using UnityEngine;
using UnityEngine.UIElements;

public class MyCustomElement 
{
    const string k_ToolbarElementName = "Examples/Analysis Windows";
    static (string, string, string)[] s_Elements = 
        new(string name, string tooptip, string menuPath)[]
        {
            // Open profiler window
            ("Profiler", "Open the Profiler window","Window/Analysis/Profiler"),
            // Open frame debugger window
            ("Frame Debugger", "Open the Frame Debugger window","Window/Analysis/Frame Debugger"),
            // Open physics debugger window
            ("Physics Debugger", "Open the Physics Debugger window","Window/Analysis/Physics Debugger")
        };

    static bool s_DisplayAsButtons = true;
    
    [MainToolbarElement(k_ToolbarElementName, defaultDockPosition = MainToolbarDockPosition.Middle)]
    static IEnumerable<MainToolbarElement> CreateAnalysisWindowsBar()
    {
        if (s_DisplayAsButtons)
        {
            foreach (var element in s_Elements)
            {
                yield return new MainToolbarButton(
                    new MainToolbarContent(element.Item1, element.Item2),
                    () => EditorApplication.ExecuteMenuItem(element.Item3))
                {
                    populateContextMenu = PopulateContextMenu,
                };
            }
        }
        else
        {
            yield return new MainToolbarDropdown(
                new MainToolbarContent("Analysis", "Open the list of available analysis windows"),
                ShowDropdownMenu)
            {
                populateContextMenu = PopulateContextMenu,
            };
        }
    }

    static void PopulateContextMenu(DropdownMenu menu)
    {
        menu.AppendAction(
            L10n.Tr(s_DisplayAsButtons ? "Display as Dropdown" : "Display as Buttons"),
            UpdateDisplayType);
    }

    static void UpdateDisplayType(DropdownMenuAction _)
    {
        s_DisplayAsButtons = !s_DisplayAsButtons;
        MainToolbar.Refresh(k_ToolbarElementName);
    }

    static void ShowDropdownMenu(Rect dropDownRect)
    {
        var menu = new GenericMenu();
        foreach (var element in s_Elements)
        {
            menu.AddItem(new GUIContent(element.Item1), false, () =>
            {
                EditorApplication.ExecuteMenuItem(element.Item3);
            });
        }
        menu.DropDown(dropDownRect);
    }
}

Статические свойства

Свойство Описание
defaultMenuPriorityЗначение по умолчанию для MainToolbarElement.menuPriority. Укажите приоритет ниже этого значения, чтобы пункт меню элемента основной панели инструментов отображался перед элементами по умолчанию, или укажите более высокое значение, чтобы он отображался после элементов по умолчанию.

Свойства

Свойство Описание
defaultDockIndexУкажите порядок, в котором пользовательские элементы будут пришвартованы на главной панели инструментов.
defaultDockPositionИспользуйте это свойство, чтобы указать позицию элемента в док-станции по умолчанию: слева, посередине или справа.
menuPriorityПриоритет меню определяет порядок, в котором основные элементы панели инструментов отображаются в меню панели инструментов.
pathУникальный идентификатор этого элемента панели инструментов.