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

MainToolbar.Refresh

Declaration

public static void Refresh(string path);

Параметры

Параметр Описание
путь Путь уникального идентификатора обновляемого элемента. См. MainToolbarElementAttribute.path.

Описание

Уведомление главной панели инструментов об обновлении содержимого или поведения элемента панели инструментов.

Для обновления элемента панели инструментов панели инструментов запрашивает MainToolbarElement дескриптор снова из MainToolbarElementAttribute помеченный статический метод с таким же путём.

using UnityEditor;
using UnityEditor.Toolbars;
using UnityEngine;

public class MainToolbarToggleExample
{
    const string kElementPath = "Examples/Toggle Scene Visibility";

    [MainToolbarElement(kElementPath, defaultDockPosition = MainToolbarDockPosition.Middle)]
    public static MainToolbarElement CreateSceneViewGridToggle()
    {
        bool showGrid = SceneView.lastActiveSceneView is not null && SceneView.lastActiveSceneView.showGrid;

        var onIcon = EditorGUIUtility.IconContent("d_scenevis_visible").image as Texture2D;
        var offIcon = EditorGUIUtility.IconContent("d_scenevis_hidden").image as Texture2D;
        // We can change the content based on the internal state we want represented e.g. showGrid
        var icon = showGrid ? onIcon : offIcon;
        var content = new MainToolbarContent("Show Grid", icon, "Toggle grid visibility");

        return new MainToolbarToggle(content, showGrid, ToggleSceneGrid);
    }

    static void ToggleSceneGrid(bool value)
    {
        // The MainToolbarToggle does not keep its own state. It notifies this user code via
        // our ToggleSceneGrid callback, and it is the user's responsibility to update their
        // internal state and refresh the UI.
        if (SceneView.lastActiveSceneView is not null)
            SceneView.lastActiveSceneView.showGrid = value;
        MainToolbar.Refresh(kElementPath);
    }

    static void SceneViewChanged(SceneView oldScene, SceneView newScene)
    {
        // Scene grid visibility can be changed elsewhere such as in the Scene view. 
        // If that happens we want to be notified in order to refresh the UI to match.
        // Since CreateSceneViewGridToggle checks the internal state to match the UI content it produces,
        // we only need to call MainToolbar.Refresh with the matching path, but we will just use ToggleSceneGrid
        // for simplicity.
        if (oldScene != null)
            oldScene.gridVisibilityChanged -= ToggleSceneGrid;
        if (newScene != null)
            newScene.gridVisibilityChanged += ToggleSceneGrid;
    }

    static MainToolbarToggleExample()
    {
        SceneView.lastActiveSceneViewChanged += SceneViewChanged;
    }
}

состояние `MainToolbarElements` меняется только тогда, когда его обновляет пользователь. Для этого обратные вызовы сообщают пользователю, когда обновить состояние в результате взаимодействия с интерфейсом — например, при выборе переключателя. Затем вызывается `MainToolbar.Refresh`, чтобы привести интерфейс в соответствие с новым состоянием. Вызывать `MainToolbar.Refresh` можно всякий раз, когда состояние меняется, — в том числе когда оно меняется внутренне, а не из-за взаимодействия с интерфейсом.