美文网首页Unity编辑器开发分享unity修炼之路
Unity3D研究院之拓展自定义编辑器窗口(二)

Unity3D研究院之拓展自定义编辑器窗口(二)

作者: 霸俊流年 | 来源:发表于2017-09-21 11:19 被阅读14次

    转载自:http://www.xuanyusong.com/archives/2211
    Unity支持自行创建窗口,也支持自定义窗口布局。在Project视图中创建一个Editor文件夹,在文件夹中在创建一条脚本。
    自定义窗口需要让脚本继承EditorWindow在设置MenuItem,此时在Unity导航菜单栏中GameObjec->window就可创建一个自定义窗口。
    C#

    usingUnityEngine;
    usingUnityEditor;
    publicclassMyEditor:EditorWindow
    {
    [MenuItem("GameObject/window")]
    staticvoidAddWindow()
    {
    //创建窗口
    Rect  wr=newRect(0,0,500,500);
    MyEditor window=(MyEditor)EditorWindow.GetWindowWithRect(typeof(MyEditor),wr,true,"widow name");
    window.Show();
    }
    }
    

    ** EditorWindow.GetWindowWithRect() 和 EditorWindow.GetWindow()都可以创建一个窗口。前者可以规定窗口的区域,后者可通过鼠标动态的延伸窗口。参数1表示窗口的对象,参数2表示窗口的区域,参数3表示窗口类型true表示窗口不会被别的窗口覆盖,参数4表示窗口的名称。**

    然后我们在扩充一下自定义窗口,仔细看看窗口的生命周期。
    C#

    usingUnityEngine;
    usingUnityEditor;
    publicclassMyEditor:EditorWindow
    {
    [MenuItem("GameObject/window")]
    staticvoidAddWindow()
    {
    //创建窗口
    Rect  wr=newRect(0,0,500,500);
    MyEditor window=(MyEditor)EditorWindow.GetWindowWithRect(typeof(MyEditor),wr,true,"widow name");
    window.Show();
    }
    //输入文字的内容
    privatestringtext;
    //选择贴图的对象
    privateTexture texture;
    publicvoidAwake()
    {
    //在资源中读取一张贴图
    texture=Resources.Load("1")asTexture;
    }
    //绘制窗口时调用
    voidOnGUI()
    {
    //输入框控件
    text=EditorGUILayout.TextField("输入文字:",text);
    if(GUILayout.Button("打开通知",GUILayout.Width(200)))
    {
    //打开一个通知栏
    this.ShowNotification(newGUIContent("This is a Notification"));
    }
    if(GUILayout.Button("关闭通知",GUILayout.Width(200)))
    {
    //关闭通知栏
    this.RemoveNotification();
    }
    //文本框显示鼠标在窗口的位置
    EditorGUILayout.LabelField("鼠标在窗口的位置",Event.current.mousePosition.ToString());
    //选择贴图
    texture=EditorGUILayout.ObjectField("添加贴图",texture,typeof(Texture),true)asTexture;
    if(GUILayout.Button("关闭窗口",GUILayout.Width(200)))
    {
    //关闭窗口
    this.Close();
    }
    }
    //更新
    voidUpdate()
    {
    }
    voidOnFocus()
    {
    Debug.Log("当窗口获得焦点时调用一次");
    }
    voidOnLostFocus()
    {
    Debug.Log("当窗口丢失焦点时调用一次");
    }
    voidOnHierarchyChange()
    {
    Debug.Log("当Hierarchy视图中的任何对象发生改变时调用一次");
    }
    voidOnProjectChange()
    {
    Debug.Log("当Project视图中的资源发生改变时调用一次");
    }
    voidOnInspectorUpdate()
    {
    //Debug.Log("窗口面板的更新");
    //这里开启窗口的重绘,不然窗口信息不会刷新
    this.Repaint();
    }
    voidOnSelectionChange()
    {
    //当窗口出去开启状态,并且在Hierarchy视图中选择某游戏对象时调用
    foreach(TransformtinSelection.transforms)
    {
    //有可能是多选,这里开启一个循环打印选中游戏对象的名称
    Debug.Log("OnSelectionChange"+t.name);
    }
    }
    voidOnDestroy()
    {
    Debug.Log("当窗口关闭时调用");
    }
    }
    


    下载内容:http://vdisk.weibo.com/s/xHLuJ

    相关文章

      网友评论

        本文标题:Unity3D研究院之拓展自定义编辑器窗口(二)

        本文链接:https://www.haomeiwen.com/subject/kxszsxtx.html