CustomEditor使用方式

@[CustomEditor(YouScript)]

这个比较常用,用于对对象界面的扩展,比如一个对象的属性和方法。

1、创建一个ExampleEditor脚本,在类上添加[CustomEditor(typeof(T))]属性,重写OnInspectorGUI方法,用于扩展Inspector。

python Unity编辑器 unity代码编辑器_菜单项

python Unity编辑器 unity代码编辑器_python Unity编辑器_02

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上。

python Unity编辑器 unity代码编辑器_菜单项

python Unity编辑器 unity代码编辑器_python Unity编辑器_02

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是与否,都可以通过它来访问。

python Unity编辑器 unity代码编辑器_静态函数_05