Unity编辑器扩展之EditorWindow

版权声明:本文为Focustc原创文章,转载请注明作者及出处。 https://blog.csdn.net/caozhankui/article/details/51428205

Unity编辑器扩展之EditorWindow

  • 继承这个类的编辑器脚本可以用来创建一个编辑器窗口,类似Inspector窗口
  • 若要在这个类中添加一些控件,可以使用GUI和GUILayout控件,还可以使用编辑器专用控件EditorGUI/EditorGUILayout

脚本创建

  • 在Assets/Editor文件夹下创建脚本,并继承UnityEditor.EditorWindow
  • 在OnGUI函数中写控件代码

窗口显示的触发

  • 一般使用MenuItem属性创建一个菜单选项,点击后调用此函数显示窗口,如EditorWindow.GetWindow(typeof(MyWindow))

为窗口添加控件

  • 上述提到的EditorGUILayout等类中包含类各种控件,比如IntField, IntPopup, IntSlider, Vector2Field, TextField等等
  • 将创建这些控件的代码放在OnGUI函数中,则每一次渲染窗口都会执行一次

其他功能

  • Update():对于可见窗口,每秒调用100次
  • OnDestroy():关闭窗口时调用
  • OnFocus():窗口被选中时调用
  • OnLostFocus():窗口不再被选中时调用

例子

  • 以下为示例,还可参考Unity官方文档EditorWindow部分

    using UnityEditor;
    using UnityEngine;
    
    public class MyExt : EditorWindow {
        private int param1 = -1;
        private float param2 = 0;
        private string name = "";
        private int id = 0;
    
        [MenuItem("MyExt/Edit", false, 1)]
        private static void Init()
        {
            MyExt editor = (MyExt)EditorWindow.GetWindow(typeof(MyExt));
            editor.Show();
        }
    
        void OnGUI()
        {
            GUILayout.Label("Section1", EditorStyles.boldLabel);
            param1 = EditorGUILayout.IntField("param1 int", param1);
            if (GUILayout.Button("Load"))
            {
                Debug.Log("Load");
            }
    
            GUILayout.Label("Section2", EditorStyles.boldLabel);
            param2 = EditorGUILayout.FloatField("param2 float", param2);
            name = EditorGUILayout.TextField("Name", name);
            id = EditorGUILayout.IntSlider("id 0~8", id, 0, 100);
        }
    }
    

作者Focustc,来自于 CSDN

猜你喜欢

转载自blog.csdn.net/caozhankui/article/details/51428205