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

MainToolbarDropdown

класс в UnityEditor.Toolbars

Наследуется от:Toolbars.MainToolbarElement

Описание

Описывает содержание и поведение элемента раскрывающегося списка для основной панели инструментов.

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

using System.IO;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEditor.Toolbars;
using UnityEngine;
using UnityEngine.SceneManagement;

public class MainToolbarDropdownSceneSelectorExample
{
    const string kElementPath = "Examples/Scene Selector";

    static string[] scenePaths;

    [MainToolbarElement(kElementPath, defaultDockPosition = MainToolbarDockPosition.Middle)]
    public static MainToolbarElement CreateSceneSelectorDropdown()
    {
        string activeSceneName;
        if (Application.isPlaying)
            activeSceneName = SceneManager.GetActiveScene().name;
        else
            activeSceneName = EditorSceneManager.GetActiveScene().name;
        if (activeSceneName.Length == 0)
            activeSceneName = "Untitled";

        var icon = EditorGUIUtility.IconContent("UnityLogo").image as Texture2D;
        var content = new MainToolbarContent(activeSceneName, icon, "Select active scene");
        return new MainToolbarDropdown(content, ShowDropdownMenu);
    }

    static void ShowDropdownMenu(Rect dropDownRect)
    {
        var menu = new GenericMenu();
        if (scenePaths.Length == 0)
        {
            menu.AddDisabledItem(new GUIContent("No Scenes in Project"));
        }
        foreach (string scenePath in scenePaths)
        {
            string sceneName = Path.GetFileNameWithoutExtension(scenePath);
            menu.AddItem(new GUIContent(sceneName), false, () =>
            {
                SwitchScene(scenePath);
            });
        }
        menu.DropDown(dropDownRect);
    }

    static void SwitchScene(string scenePath)
    {
        if (Application.isPlaying)
        {
            string sceneName = Path.GetFileNameWithoutExtension(scenePath);
            if (Application.CanStreamedLevelBeLoaded(sceneName))
            {
                Debug.Log($"Switching to scene: {sceneName}");
                SceneManager.LoadScene(sceneName);
            }
            else
            {
                Debug.LogError($"Scene '{sceneName}' is not in the Build Settings.");
            }
        }
        else
        {
            if (File.Exists(scenePath))
            {
                if (EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo())
                {
                    Debug.Log($"Switching to scene: {scenePath}");
                    EditorSceneManager.OpenScene(scenePath);
                }
            }
            else
            {
                Debug.LogError($"Scene at path '{scenePath}' does not exist.");
            }
        }
    }

    static void RefreshSceneList()
    {
        scenePaths = Directory.GetFiles("Assets", "*.unity", SearchOption.AllDirectories);
    }

    static void SceneSwitched(Scene oldScene, Scene newScene)
    {
        MainToolbar.Refresh(kElementPath);
    }

    static MainToolbarDropdownSceneSelectorExample()
    {
        RefreshSceneList();
        EditorApplication.projectChanged += RefreshSceneList;
        SceneManager.activeSceneChanged += SceneSwitched;
        EditorSceneManager.activeSceneChangedInEditMode += SceneSwitched;
    }
}

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

using UnityEditor;
using UnityEditor.Toolbars;
using UnityEngine;

public class MainToolbarDropdownExample
{
    const string kElementPath = "Examples/Example Dropdown";

    static string selectedItem = "Item 1";

    [MainToolbarElement(kElementPath, defaultDockPosition = MainToolbarDockPosition.Middle)]
    public static MainToolbarElement CreateExampleDropdown()
    {
        var content = new MainToolbarContent(selectedItem);
        return new MainToolbarDropdown(content, ShowDropdownMenu);
    }

    static void ShowDropdownMenu(Rect dropDownRect)
    {
        var menu = new GenericMenu();
        menu.AddItem(new GUIContent("Item 1"), false, () =>
        {
            selectedItem = "Item 1";
            MainToolbar.Refresh(kElementPath);
        });
        menu.AddItem(new GUIContent("Item 2"), false, () =>
        {
            selectedItem = "Item 2";
            MainToolbar.Refresh(kElementPath);
        });
        menu.AddItem(new GUIContent("Item 3"), false, () =>
        {
            selectedItem = "Item 3";
            MainToolbar.Refresh(kElementPath);
        });
        menu.DropDown(dropDownRect);
    }
}

Конструкторы

Конструктор Описание
MainToolbarDropdownУкажите содержимое и функцию раскрывающегося списка главной панели инструментов.
Унаследованные члены 1

Свойства

СвойствоОписание
contentMainToolbarContent описывает содержание элемента основной панели инструментов. Например, текст, значок или tooltip.
displayedУказывает, должен ли отображаться `VisualElement` для этого элемента панели инструментов. По умолчанию установлено значение `True`.
enabledУказывает, должен ли элемент панели инструментов получать события ввода. По умолчанию установлено значение `True`.
populateContextMenuДобавить содержимое в контекстное меню, которое появляется при щелчке правой кнопкой мыши этого элемента панели инструментов.