Unity编辑器拓展4_创建编辑器窗体

创建编辑器窗体

Unity提供了几种可以创建编辑器窗体的方式,开发者可以针对不同使用情况来创建。

1、继承自ScriptableWizard类创建对话框窗体

Unity为开发者提供了一个简单的快速创建对话框窗体的方式,只需要继承自ScriptableWizard类,我们容易发现ScriptableWizard实际上是继承自EditorWindow,只是做了一层封装,该类窗体一般用于快捷功能的操作,例如统一修改场景中多个对象的位置等信息。

代码示例

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEditor;



public class Test4_WindowExample : ScriptableWizard

{

    public string StrName = "123";

    public int Age = 18;



    [MenuItem("MyWindows/Window1")]

    public static void ShowWindow()

    {

        ScriptableWizard.DisplayWizard<Test4_WindowExample>("Window1_ScriptableWizard", "确定", "取消");

    }



    private void OnEnable()

    {

        Debug.Log("窗口打开");

    }



    private void OnDisable()

    {

        Debug.Log("Disable");

    }



    private void OnDestroy()

    {

        Debug.Log("Destroy");

    }



    private void OnFocus()

    {

        Debug.Log("OnFocus");

    }



    private void OnLostFocus()

    {

        Debug.Log("LostFocus");

    }



    private void OnInspectorUpdate()

    {

        Debug.Log("Update");

    }



    private void OnWizardCreate()

    {

        Debug.Log("Create");

    }



    private void OnWizardOtherButton()

    {

        Debug.Log("OtherBtn");

    }



    private void OnSelectionChange()

    {

        Debug.Log("SelectionChange");

        if(Selection.activeObject)

            Debug.Log(Selection.activeObject.name);

    }



    private void OnWizardUpdate()

    {

        Debug.Log("WizardUpdate");

    }



    //private void OnGUI()

    //{

    //    if (GUI.Button(new Rect(0, 0, 120, 40), "确定12"))

    //    {

    //        Debug.Log("OnClicked");

    //    }

    //}



}

效果展示

2、继承自EditorWindow类创建自定义窗体

创建自定义的编辑器窗体都需要继承自EditorWindow类,它可以自由浮动,也可以作为选项卡停靠,就像Unity编辑器中其他的窗体一样。编辑器窗体一般由菜单项打开,通常包含某一类的功能。作为一个编辑器类,需要放在Editor文件夹中。

代码示例

using System.Collections;

using System.Collections.Generic;

using UnityEditor;

using UnityEngine;



public class Test4_Window2 : EditorWindow

{

    private static Test4_Window2 window;



    [MenuItem("MyWindows/Window2")]

    public static void ShowWindow()

    {

        window = EditorWindow.GetWindow<Test4_Window2>("Window_EditorWindow");

        window.Show();

    }



    private void OnEnable()

    {

        Debug.Log("OnEnable");

    }



    private void OnDisable()

    {

        Debug.Log("OnDisable");

    }



    private void OnDestroy()

    {

        Debug.Log("OnDestroy");

    }



    private void OnFocus()

    {

        Debug.Log("OnFocus");

    }



    private void OnLostFocus()

    {

        Debug.Log("OnLostFocus");

    }



    private void OnInspectorUpdate()

    {

        Debug.Log("OnUpdate");

    }



    private void OnSelectionChange()

    {

        Debug.Log("OnSelectionChange");

    }



    private void OnGUI()

    {

        Debug.Log("OnGUI");



    }



}

效果展示

3、继承自PopupWindowContent类创建弹窗

代码示例

using System.Collections;

using System.Collections.Generic;

using UnityEditor;

using UnityEngine;



public class Test4_PopWindowContent : EditorWindow

{

    private static Test4_PopWindowContent window;

    private PopWindowExample popWindow = new PopWindowExample();

    private Rect buttonRect;



    [MenuItem("MyWindows/Window3")]

    public static void ShowWindow()

    {

        window = EditorWindow.GetWindow<Test4_PopWindowContent>();

        window.Show();

    }



    private void OnGUI()

    {

        GUILayout.Label("Popup example", EditorStyles.boldLabel);

        if (GUILayout.Button("Popup Options", GUILayout.Width(200)))

        {

            PopupWindow.Show(buttonRect, popWindow);

        }

        //获取GUILayout最后用于控件的矩形

        if (Event.current.type == EventType.Repaint)

            buttonRect = GUILayoutUtility.GetLastRect();

    }



}



public class PopWindowExample : PopupWindowContent

{

    private bool toggle = true;



    public override void OnOpen()

    {

        Debug.Log("OnOpen");

    }



    public override void OnClose()

    {

        Debug.Log("OnClose");

    }



    public override Vector2 GetWindowSize()

    {

        return new Vector2(200, 100);

    }



    public override void OnGUI(Rect rect)

    {

        EditorGUILayout.LabelField("PopWindow");

        EditorGUILayout.LabelField("弹出框");

        toggle = EditorGUILayout.Toggle(toggle);

    }

}

效果展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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编辑器拓展

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值