CustomEditor使用方式
@[CustomEditor(YouScript)]
这个比较常用,用于对对象界面的扩展,比如一个对象的属性和方法。
1、创建一个ExampleEditor脚本,在类上添加[CustomEditor(typeof(T))]属性,重写OnInspectorGUI方法,用于扩展Inspector。
using UnityEditor;
using UnityEngine;
[CustomEditor(typeof(Example))]
public class ExampleEditor : Editor
{
public override void OnInspectorGUI()
{
base.OnInspectorGUI();
Example _example = target as Example;
if (GUILayout.Button("执行Example方法"))
{
_example.LogError();
}
//扩展Inspector
}
}
View Code
target就是你所添加的类型T,需要强转为你需要的类型。其他的做法与OGUI类似。
2、创建Example脚本,继承MonoBehaviour,用来挂载到Object上。
using UnityEngine;
[ExecuteInEditMode]
public class Example : MonoBehaviour
{
public void LogError()
{
Debug.LogError("执行Example方法");
}
}
View Code
Example中添加你需要处理的数据,或者函数。这样挂载Example在GameObject上,Inspector就可以查看和执行相关的函数了。如果你需要在编辑模式上运行周期函数,还可以在Example上添加[ExecuteInEditMode]属性。
ExecuteInEditMode使用方式
[ExecuteInEditMode]
我们通常书写的脚本,并不会定义[ExecuteInEditMode]这个Attribute,所以Awake()和Start()都只有在Runtime中才会执行。给脚本添加[ExecuteInEditMode]特性可以在编辑器模式运行,在ExecuteInEditMode下两个方法的调用顺序和区别。
1:在该MonoBehaviour在编辑器中被赋予给GameObject时,Awake和Start方法会被执行。
2:在Play按钮被按下开始之后,Awake和Start方法将被执行。
3:在Play按钮被抬起之后,Awake和Start方法将被执行。
4:在打开含有该MonoBehaviour脚本的场景的时候,Awake和Start将被执行。
MenuItem菜单项使用方式
[MenuItem("MenuName")]
MenuItem属性允许你添加菜单项到主菜单和检视面板上下文菜单。
(该属性把任意静态函数变为一个菜单命令。仅静态函数能使用这个MenuItem属性。)
具体介绍参考:
AddComponentMenu添加组件菜单项
[AddComponentMenu("")]
在编辑器添加一个用于添加组件的菜单项,将拥有该属性的脚本添加到选中的物体上。
下面来说说相关的类:
Editor
这个类用于扩展一些编辑器全局的功能.且这个类可以和目标对象作用[CustomEditor(MyScript)];在Editor类里,可以重写OnInspectorGUI(这个用的比较多的)等方法。
EditorWindow
这个类,用于自定义一个窗口,你可以为窗口添加一些按钮,选项等。比如,如果你想弄一个任务编辑器,用于配置一些数据。那么直接可以使用该类。
它有一个OnSceneUI的事件可以监听,可以使你实现像自己的编辑器一样,在Scene中点击某个物体后,在鼠标位置显示一个菜单,或者一些操作按钮。
另外,还有一个比较适用的事件是OnHierarchyChange。当一个对象的父物体被改变,或者被新建的时候,这个事件会被触发。
EditorApplication主应用程序类
这个类提供了许多变量的访问,同时提供了Save等方法。比如,你可以新建一个编辑器脚本,在它的update函数里,进行记事,已做定时保存,从而避免不必要的损失。
这个类还提供了新建场景,打开项目等操作。
如果你是在界面下使用Unity3D,可能这个类的意义不大。但如果你是基于U3D的命令行来构建一个一键式多平台发布方案,那么这个类的地位就举足轻重了。
EditorUtility
提供了很多全局函数,并且多半是静态的。比如,你想弹出一个打开文件的对话框,或者保存文件的对话框。或者你要查看场景树中的某个对象enable是与否,都可以通过它来访问。