Unity编辑器拓展(PopupWindow/AdvancedDropdown)

PopupWindow

弹出窗口没有边距,不可拖动,也无法调节大小。此外,它们还会在失去焦点时自动关闭。它们用于显示短暂的信息或选项。

UnityEditor.PopupWindow - Unity 脚本 APIhttps://docs.unity.cn/cn/2020.3/ScriptReference/PopupWindow.html

using UnityEngine;
using UnityEditor;

public class PopWindowExample : EditorWindow
{
    private Rect buttonRect;
    PopupExample example = new PopupExample();

    [MenuItem("Tools/PopWindowExample")]
    static void Open()
    {
        EditorWindow.GetWindow<PopWindowExample>().Show();
    }

    private void OnGUI()
    {
        GUILayout.Label("Editor window with Popup example", EditorStyles.boldLabel);       
        if (GUILayout.Button("Popup Options", GUILayout.Width(200)))
        {           
            PopupWindow.Show(buttonRect, example);            
        }
        GUILayout.Label( "Selection == " + example.Str);

        if (Event.current.type == EventType.Repaint)
        {
            buttonRect = GUILayoutUtility.GetLastRect();
        }
    }

    //继承PopupWindowContent
    public class PopupExample : PopupWindowContent
    {
        private bool toggle1 = true;
        private bool toggle2 = true;
        private bool toggle3 = true;

        public string Str
        {
            get
            {
                string str = "";
                if (toggle1)
                {
                    str += 1;
                }
                if (toggle2)
                {
                    str += 2;
                }
                if (toggle3)
                {
                    str += 3;
                }
                return str;
            }
        }

        public override Vector2 GetWindowSize()
        {
            return new Vector2(200, 150);
        }

        //绘制
        public override void OnGUI(Rect rect)
        {
            GUILayout.Label("Popup Options Example", EditorStyles.boldLabel);
            toggle1 = EditorGUILayout.Toggle("Toggle 1", toggle1);
            toggle2 = EditorGUILayout.Toggle("Toggle 2", toggle2);
            toggle3 = EditorGUILayout.Toggle("Toggle 3", toggle3);
        }

        //打开
        public override void OnOpen()
        {
            Debug.Log("Popup opened: " + this);
        }

        //关闭
        public override void OnClose()
        {
            Debug.Log("Popup closed: " + this);
        }
    }
}

AdvancedDropdown 

可搜索的下拉控件。

IMGUI.Controls.AdvancedDropdown - Unity 脚本 APIhttps://docs.unity.cn/cn/2020.3/ScriptReference/IMGUI.Controls.AdvancedDropdown.html

using UnityEditor;
using UnityEngine;
using UnityEditor.IMGUI.Controls;

class WeekdaysDropdown : AdvancedDropdown
{
    public string selectStr;

    public WeekdaysDropdown(AdvancedDropdownState state) : base(state)
    {
    }

    //构建子项
    protected override AdvancedDropdownItem BuildRoot()
    {
        var root = new AdvancedDropdownItem("Weekdays");

        var firstHalf = new AdvancedDropdownItem("First half");
        var secondHalf = new AdvancedDropdownItem("Second half");
        var weekend = new AdvancedDropdownItem("Weekend");

        firstHalf.AddChild(new AdvancedDropdownItem("Monday"));
        firstHalf.AddChild(new AdvancedDropdownItem("Tuesday"));
        secondHalf.AddChild(new AdvancedDropdownItem("Wednesday"));
        secondHalf.AddChild(new AdvancedDropdownItem("Thursday"));
        weekend.AddChild(new AdvancedDropdownItem("Friday"));
        weekend.AddChild(new AdvancedDropdownItem("Saturday"));
        weekend.AddChild(new AdvancedDropdownItem("Sunday"));

        root.AddChild(firstHalf);
        root.AddChild(secondHalf);
        root.AddChild(weekend);

        return root;
    }

    //选择回调
    protected override void ItemSelected(AdvancedDropdownItem item)
    {
        base.ItemSelected(item);
        selectStr = item.name;
    }
}

public class AdvancedDropdownTestWindow : EditorWindow
{
    WeekdaysDropdown dropdown = new WeekdaysDropdown(new AdvancedDropdownState());

    [MenuItem("Tools/AdvancedDropdownTestWindow")]
    static void Open()
    {
        EditorWindow.GetWindow<AdvancedDropdownTestWindow>().Show();
    }

    void OnGUI()
    {
        var rect = GUILayoutUtility.GetRect(new GUIContent("Show"), EditorStyles.toolbarButton);
        if (GUI.Button(rect, new GUIContent("Show"), EditorStyles.toolbarButton))
        {            
            dropdown.Show(rect);
        }
        GUILayout.Label(dropdown.selectStr);
    }
}

编辑器免费课程:

独立游戏《Unity打造关卡编辑器》Unity 独立游戏 关卡编辑器icon-default.png?t=LA92https://bycwedu.vipwan.cn/promotion_channels/72762192

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Unity编辑器拓展(Editor Extension)可以通过自定义的脚本来扩展Unity编辑器的功能和界面,以满足特定项目的需求。通过编辑器拓展,开发者可以创建自定义的编辑器窗口、工具栏按钮、菜单项、检视面板等,来增强Unity编辑器的功能和流程。 要创建一个Unity编辑器拓展,你可以使用C#编写一个继承自Editor类的脚本。这个脚本可以通过Unity的Inspector面板来设置相关的属性和行为。以下是一个简单的示例: ```csharp using UnityEngine; using UnityEditor; public class MyEditorExtension : EditorWindow { [MenuItem("Custom Tools/My Editor Window")] public static void OpenWindow() { // 创建并打开一个自定义的编辑器窗口 MyEditorExtension window = (MyEditorExtension)EditorWindow.GetWindow(typeof(MyEditorExtension)); window.Show(); } private void OnGUI() { // 在编辑器窗口中绘制UI元素 GUILayout.Label("Hello, I am a custom editor window!"); if (GUILayout.Button("Click Me")) { Debug.Log("Button clicked!"); } } } ``` 上述代码创建了一个自定义的编辑器窗口,并在窗口中绘制了一个标签和一个按钮。通过在Unity编辑器中点击"Custom Tools"菜单下的"My Editor Window",可以打开这个自定义的编辑器窗口。 除了编辑器窗口,你还可以通过继承Editor类来创建自定义的检视面板、菜单项等。Unity官方文档中有更详细的教程和示例,可以帮助你更深入地了解和使用Unity编辑器拓展
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

萧寒大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值