Unity拓展编辑器 —— EditorWindow(一)

我们在操作unity中会经常遇到这样那样的窗口。

Inspector窗口,Console窗口,Hierarchy窗口,等 这些都是unity内置的。

又或者说你看到人家插件的窗口,花花绿绿的,自己也想写一个拿来学习(装逼)

unity已经为开发者做了很多支持。 还是去看api,全英文我怎么看的懂,找翻译,找度娘,不要找借口

废话不多说,上车了。

传送门官方EditorWindow   API   https://docs.unity3d.com/ScriptReference/EditorWindow.html

具体参数我就暂时不介绍了。 太多 讲不过来,自己慢慢试(狗头保命.png)

BeginArea 在固定的屏幕区域开始GUI控件的GUI布局块。
BeginHorizontal 开始水平对照组。
BeginScrollView 开始一个自动布局的滚动视图。
BeginVertical 开始一个垂直控制组。
Box 制作一个自动布局框。
Button 做一个单一的按钮。
EndArea 关闭一个以BeginArea开始的GUILayout块。
EndHorizontal 关闭一组开始与开始横向。
EndScrollView 以调用开始滚动视图来结束滚动视图。
EndVertical 结束一组开始与开始垂直。
ExpandHeight 传递给控件以允许或不允许垂直扩展的选项。
ExpandWidth 传递给控件以允许或不允许水平扩展的选项。
FlexibleSpace 插入一个灵活的空间元素。
Height 传递给控件的选项,使其具有绝对高度。
HorizontalScrollbar 制作一个水平滚动条。
HorizontalSlider 一个水平滑块,用户可以拖动来改变最小值和最大值之间的值。
Label 制作一个自动布局标签。
MaxHeight 传递给控件以指定最大高度的选项。
MaxWidth 传递给控件以指定最大宽度的选项。
MinHeight 传递给控件以指定最小高度的选项。
MinWidth 传递给控件以指定最小宽度的选项。
PasswordField 创建一个用户可以输入密码的文本字段。
RepeatButton 做一个重复按钮。只要用户按住不放,按钮就会返回true
SelectionGrid 制作一个选择网格。
Space 在当前布局组中插入空格
TextArea 创建一个多行文本字段,用户可以在其中编辑字符串。
TextField 创建一个单行文本字段,用户可以在其中编辑字符串。
Toggle 做一个开关按钮。
Toolbar 制作一个工具栏
VerticalScrollbar 制作一个垂直滚动条
Width 传递给控件的选项,使其具有绝对宽度。
Window  

创建文件夹Editor与脚本,位置无所谓,跟 Resources一样。

然后自己去EditorWindow类中看下,F12,知其然知其所以然

上代码,最简单的窗口

public class EditorWindowTimor : EditorWindow
{
    [MenuItem("Timor/TimorWindow -- 提莫队长的窗口")]  //添加菜单选项
    public static void ShowWindow()
    {
        EditorWindow window = EditorWindow.GetWindow(typeof(EditorWindowTimor));
        window.Show();      
    }
}

效果

继续研究GetWindow参数

所以这几中写法都没有问题,自己去改参数,挨个试试

EditorWindow window1 = EditorWindow.GetWindow(typeof(TimorWindow));
EditorWindow window2 = EditorWindow.GetWindow(typeof(TimorWindow), true, "提莫队长的窗口", true);
EditorWindow window3 = EditorWindow.GetWindow<TimorWindow>();
EditorWindow window4 = EditorWindow.GetWindow<TimorWindow>(true);
EditorWindow window5 = EditorWindow.GetWindowWithRect(typeof(TimorWindow), new Rect(Screen.width / 3, Screen.height / 3, 500, 500), true, "提莫队长的窗口");

我们去看官方API

参数

t : 窗口类型,记得继承editorWindow

title :窗口的标题

focus : 是否获得焦点,默认获得焦点

utility:是窗口是否浮动,如果是就不能内嵌到unity其他窗口中去,如果不是就能嵌入其他窗口。(可以省略,默认为内嵌入式)

rect :窗体的出现位置,及窗体大小

 窗体事件

using UnityEngine;
using UnityEditor;
 
namespace Timor.Editor
{

    public class TimorFirstWindow : EditorWindow
    {

        [MenuItem("Timor/我的第一个窗口")]
        public static void ShowMyWindow()
        {
            TimorFirstWindow window = EditorWindow.GetWindow<TimorFirstWindow>("提莫的窗口");

            window.Show();
            window.minSize = new Vector2(200, 300);
        }

        #region 窗体事件调用
        private void OnProjectChange()
        {
            Debug.Log("当场景改变时调用");
        }

        private void OnHierarchyChange()
        {
            Debug.Log("当选择对象属性改变时调用");
        }

        void OnGetFocus()
        {
            Debug.Log("当窗口得到焦点时调用");
        }

        private void OnLostFocus()
        {
            Debug.Log("当窗口失去焦点时调用");
        }

        private void OnSelectionChange()
        {
            Debug.Log("当改变选择不同对象时调用");
        }

        private void OnInspectorUpdate()
        {
            Debug.Log("监视面板调用");
        }

        private void OnDestroy()
        {
            Debug.Log("当窗口关闭时调用");
        }

        private void OnFocus()
        {
            Debug.Log("当窗口获取键盘焦点时调用");
        }
        #endregion
    }

}

好了,这些都是空白的窗口,下几篇讲添加内容

发布了57 篇原创文章 · 获赞 37 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_35030499/article/details/88350521