Version: 2023.2

EditorWindow.OnSelectionChange()

切换到手册

描述

每当选择发生更改时调用。

\ 保存当前选择,稍后只需单击一次即可加载。

// Simple example that lets you save the current selection and load it.

using UnityEditor;
using UnityEngine.UIElements;

public class OnSelectionChangeExample : EditorWindow
{
    private int[] selectionIDs;

    [MenuItem("Examples/Selection Saver")]
    private static void Init()
    {
        OnSelectionChangeExample window = (OnSelectionChangeExample)GetWindow(typeof(OnSelectionChangeExample));
        window.Show();
    }

    void CreateGUI()
    {
        var buttonSave = new Button();
        buttonSave.text = "Save";
        buttonSave.clicked += () => SaveSelection();
        rootVisualElement.Add(buttonSave);
        
        var buttonLoad = new Button();
        buttonLoad.text = "Load";
        buttonLoad.clicked += () => LoadLastSavedSelection();
        rootVisualElement.Add(buttonLoad);

        // Initialize selectionIDs at least once
        OnSelectionChange();
    }

    void OnSelectionChange()
    {
        selectionIDs = Selection.instanceIDs;
    }

    private void SaveSelection()
    {
        var saveStr = "";

        foreach (int i in selectionIDs)
        {
            saveStr += i + ";";
        }

        saveStr = saveStr.TrimEnd(char.Parse(";"));
        EditorPrefs.SetString("SelectedIDs", saveStr);
    }

    private void LoadLastSavedSelection()
    {
        string[] strIDs = EditorPrefs.GetString("SelectedIDs").Split(char.Parse(";"));

        int[] ids = new int[strIDs.Length];
        for (var i = 0; i < strIDs.Length; i++)
        {
            if (!string.IsNullOrEmpty(strIDs[i]))
                ids[i] = int.Parse(strIDs[i]);
        }

        Selection.instanceIDs = ids;
    }
}