unity3d拓展编辑器MenuItem的使用

MenuItem是自定义菜单栏显示

比如:[MenuItem("new/My Window")] 这样就会显示菜单new/My Window

把这个放在一个静态方法上就可以了。记住。方法一定要是静态的。

Unity圣典上的解释:

也就是说类必须继承:EditorWindow。EditorWindow在命名空间using UnityEditor;中

跟着Unity圣典上的列子和网上的列子敲了一次,这样才能深入理解

  1 using UnityEngine;
  2 using System.Collections;
  3 using UnityEditor;
  4
  5 /*
  6  拓展自定义编辑器窗口
  7  */
  8 public class GetWindows : EditorWindow
  9 {
 10
 11     /*
 12      从这EditorWindow个类来创建编辑器窗口。
 13      * 注意:这是一个编辑器类,如果想使用它你需要把它放到工程目录下的Assets/Editor文件夹下。
 14      * 编辑器类在UnityEditor命名空间下。所以当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor"引用。
 15
 16      *
 17      */
 18
 19     string myString = "Hello World";
 20     bool groupEnabled;
 21     bool myBool = true;
 22     float myFloat = 1.23f;
 23
 24     string notification = "This is a Notification";
 25
 26
 27     Texture texture;
 28
 29     //添加菜单项My Window到Window菜单
 30     [MenuItem("new/My Window")]
 31     static void Init()
 32     {
 33         ////获取现有的打开窗口或如果没有,创建一个新的
 34         /*
 35          参数一:窗口的类型,必须源于编辑器窗口
 36          * 参数二:设置为false,来创建一个浮动窗口;为true,创建一个标准窗口(标准窗口不能停靠)。 默认是false
 37          * 参数三:如果GetWindow创建一个新的窗口,它将获取这个标题。如果这个值为null,使用类名作为标题。
 38          *
 39          * GetWindows类必须继承EditorWindow
 40          *
 41          */
 42         //GetWindows window = (GetWindows)EditorWindow.GetWindow(typeof(GetWindows), false, "窗口名称");
 43
 44         //跟上面是同样的效果
 45         GetWindows window = GetWindow<GetWindows>("窗口名称");
 46         //设置窗口在屏幕中的位置
 47         window.position = new Rect(Screen.width / 2, Screen.height / 2, 500, 500);
 48         //显示窗口
 49         //window.Show();
 50
 51
 52     }
 53
 54     /// <summary>
 55     /// 在这里实现自己的编辑器界面。
 56     /// </summary>
 57     void OnGUI()
 58     {
 59
 60         /*
 61          EditorGUILayout.BeginToggleGroup 开始开关组
 62          */
 63
 64         //label
 65         GUILayout.Label("Base Settings", EditorStyles.boldLabel);
 66         //一个输入框
 67         myString = EditorGUILayout.TextField("Text Field", myString);
 68
 69         //groupEnabled为true,则打开组。false则关闭组
 70         groupEnabled = EditorGUILayout.BeginToggleGroup("Optional Settings", groupEnabled);
 71         myBool = EditorGUILayout.Toggle("Toggle", myBool);
 72         myFloat = EditorGUILayout.Slider("Slider", myFloat, -3, 3);
 73         EditorGUILayout.EndToggleGroup();
 74
 75
 76         texture = EditorGUILayout.ObjectField("添加贴图", texture, typeof(Texture), true) as Texture;
 77
 78         if (GUILayout.Button("Show Notification"))
 79         {
 80             //显示一个具有用户类型的通知消息 显示一个消息提示,过会 会慢慢消失
 81             this.ShowNotification(new GUIContent(notification));
 82         }
 83         if (GUILayout.Button("Remove Notification"))
 84         {
 85             //立即移除消息
 86             this.RemoveNotification();
 87         }
 88         if (GUILayout.Button("Close Windows"))
 89         {
 90             //关闭窗口
 91             this.Close();
 92         }
 93     }
 94
 95     void OnFocus()
 96     {
 97         Debug.Log("窗口获得焦点");
 98     }
 99     /// <summary>
100     /// 只要选择发生改变时调用。
101     /// </summary>
102     void OnSelectionChange()
103     {
104         Transform tr = Selection.transforms[0];
105         Debug.Log("当前选择的是:" + tr.name);
106     }
107     /// <summary>
108     /// 在给定检视面板每秒10帧更新。
109     /// </summary>
110     void OnInspectorUpdate()
111     {
112         //Debug.Log("窗口面板的更新");
113         //这里开启窗口的重绘,不然窗口信息不会刷新
114         this.Repaint();
115     }
116 }

最终的效果是:

时间: 2024-10-28 02:50:55

unity3d拓展编辑器MenuItem的使用的相关文章

UNITY3D拓展编辑器 - 目录

前文: 最近在自学UNITY3D拓展器,对以上功能点做一些认知范围内的总结. 目录: 1. 属性编辑器 http://weizeteng.blog.51cto.com/5604545/1774431 2. 工具编辑器 3. 场景编辑器

UNITY3D拓展编辑器 - InspectorEditor(属性编辑器)1

前文: 本章节会对InspectorEditor(属性编辑器)的创建方式进行叙述. 正文: 1.代码最终效果 2. 架构阐述 一个InspectorEditor(属性编辑器)产生直接对应着一个继承MonoBehaviour的脚本文件,脚本文件中定义着不同的属性以供InspectorEditor(属性编辑器)去实现.我们可以通过EditorGUILayout/GUILayout来实现InspectorEditor(属性编辑器)界面. 3. EditorGUILayout脚本分析 EditorGUI

Unity3D研究院之在开始学习拓展编辑器(一)

Unity拥有非常丰富的拓展编辑器接口,如果是在网上下载过别人写的插件,你会发现为什么它的监测面板视图和普通的不一样?其实是他通过代码自己绘制的监测面板,这篇博文MOMO带大家来学习编辑器.如下图所示,这是我通过代码拓展的面板视图. 下一条简单的脚本,绑定挂在摄像机上. using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public Rect mRectValue ; public T

Unity3D拓展编辑器之自动生成AnimatorController

很惭愧从事游戏开发三年半才开始记录,之前也有一些零散信息记录在有道云笔记里,但都不成体系.那就从现在开始吧! 最近项目刚出完demo,有些衔接的时间,花了一天时间写了一个方便美术同学操作的小工具.第一次写拓展编辑器,做好之后超级兴奋的说,哈哈~这个工具主要是根据某类人物的AnimatorController的模板,拷贝并将当前人物的动作自动赋值的过程,避免了手动拖拽动作操作的繁杂和失误.比如,monster一般可以共用AnimatorController的layer信息,只是各个state中的m

拓展编辑器(六)

Heriarchy视图中出现的都是游戏对象,这些对象之间同样具有一定的关联关系.我们可以用树状结构来表示游戏对象之间复杂的父子关系.接下来会一起学习如何拓展Hierarchy视图. 拓展菜单: Heriarchy视图,也可以对Creat菜单项进行拓展. using UnityEngine; using UnityEditor; public class 拓展菜单 { [MenuItem("GameObject/My Creat/Cube", false, 0)] static void

(转)Unity3d UnityEditor编辑器定制和开发插件

在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码.[MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过S

【转载】Unity3d UnityEditor编辑器定制和开发插件

在阅读本教程之前,你需要对Unity的操作流程有一些基础的认识,并且最好了解内置的GUI系统如何使用. 如何让编辑器运行你的代码 Unity3D可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知编译器何时需要触发该段代码.[MenuItem(XXX)]声明在一个函数上方,告知编译器给Unity3D编辑器添加一个菜单项,并且当点击该菜单项的时候调用该函数.触发函数里可以编写任何合法的代码,可以是一个资源批处理程序,也可以弹出一个编辑器窗口.代码里可以访问到当前选中的内容(通过S

拓展编辑器(十二)_Context菜单

点击组件中设置(鼠标右键),可以弹出Context菜单,我们可以在原有菜单中拓展出新的菜单栏,代码如下所示: using UnityEngine; using UnityEditor; public class Context菜单 { [MenuItem("CONTEXT/Transform/New Context 1")] public static void NewContext1(MenuCommand command) { //获取对象名 Debug.Log(command.c

关于Unity3D的编辑器崩溃时的线索定位

今天在Unity3D编辑器中进行功能測试的时候,编辑器突然崩溃了(就是整个窗体突然消失,进程直接结束)之后也没有不论什么错误报告信息提示.好吧,应该是偶现问题.我侥幸地想,我用的好歹也是正版啊,不应该总出这样的莫名其妙的问题吧. 再次进行相同的功能測试,编辑器又崩溃了,依旧没有不论什么错误报告,这让我想进行调试都无从调起. 想想有什么线索吧,突然想起编辑器在硬盘上也是有log输出的.在崩溃的时候,假设已经进行了错误log输出.那么就能够找到崩溃的线索.在磁盘上翻了下,最后在下面文件夹找到了log