【Unity】在Unity中自定义窗口组件

using UnityEngine;
using UnityEditor;

public class MyEditor : EditorWindow 
{
 
    [MenuItem ("GameObject/window")]
    static void AddWindow ()
    {       
        //创建窗口
        Rect  wr = new Rect (0,0,500,500);
        MyEditor window = (MyEditor)EditorWindow.GetWindowWithRect (typeof (MyEditor),wr,true,"widow name"); 
        window.Show();
    }
 
    //输入文字的内容
    private string text;
    //选择贴图的对象
    private Texture texture;
 
    public void Awake () 
    {
        //在资源中读取一张贴图
        texture = Resources.Load("1") as Texture;
    }
 
    //绘制窗口时调用
    void OnGUI () 
    {
        //输入框控件
        text = EditorGUILayout.TextField("输入文字:",text);
 
        if(GUILayout.Button("打开通知",GUILayout.Width(200)))
        {
            //打开一个通知栏
            this.ShowNotification(new GUIContent("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) as Texture;
 
        if(GUILayout.Button("关闭窗口",GUILayout.Width(200)))
        {
            //关闭窗口
            this.Close();
        }
 
    }
 
    //更新
    void Update()
    {
 
    }
 
    void OnFocus()
    {
        Debug.Log("当窗口获得焦点时调用一次");
    }
 
    void OnLostFocus()
    {
        Debug.Log("当窗口丢失焦点时调用一次");
    }
 
    void OnHierarchyChange()
    {
        Debug.Log("当Hierarchy视图中的任何对象发生改变时调用一次");
    }
 
    void OnProjectChange()
    {
        Debug.Log("当Project视图中的资源发生改变时调用一次");
    }
 
    void OnInspectorUpdate()
    {
        //Debug.Log("窗口面板的更新");
        //这里开启窗口的重绘,不然窗口信息不会刷新
        this.Repaint();
    }
 
    void OnSelectionChange()
    {
        //当窗口出去开启状态,并且在Hierarchy视图中选择某游戏对象时调用
        foreach(Transform t in Selection.transforms)
        {
            //有可能是多选,这里开启一个循环打印选中游戏对象的名称
            Debug.Log("OnSelectionChange" + t.name);
        }
    }
 
    void OnDestroy()
    {
        Debug.Log("当窗口关闭时调用");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 其实做法很简单,就是利用组件“UI Toggle Objects”。 先看效果图,先说明这是没有动画切换效果的,因...
    夏亦流风阅读 1,219评论 0 0
  • 常见的ngmodel的使用场景是在form表单相关的地方,比如input、select等。不过很多时候我们可能需要...
    zxqian1991阅读 6,144评论 1 0
  • 雨天,微笑,无声的风。 人群,沉默,寂静的心。 走过街角,留下背影,莫名的悸动。 一个人的日子,简单,平淡,好久好...
    宅小葵阅读 249评论 0 0
  • 回学校拿一份不敢和家里说的快递(只是一件牛仔外套),坐16路到火车站转102。下车以后发现,102刚刚好过来终点站...
    自说自话的洒家阅读 210评论 6 0
  • 艾玛,这日子过得可真快啊。星期三了。今天上午在家了。然后姥姥给外孙女做了面条。 非妹吃了不少,还挺爱吃的。然后下午...
    非妹麻麻阅读 349评论 0 0

友情链接更多精彩内容