UNITY3D 编辑器插件编写教程
在阅读本教程之前,你需要对 Unity 的操作流程有一些基础的认识,并且最好了解内置的 GUI 系
统如何使用。
如何让编辑器运行你的代码
Unity3D 可以通过事件触发来执行你的编辑器代码,但是我们需要一些编译器参数来告知
编译器何时需要触发该段代码。
[MenuItem(XXX)]声明在一个函数上方,告知编译器给 Unity3D 编辑器添加一个菜单项,并
且当点击该菜单项的时候调用该函数。触发函数里可以编写任何合法的代码,可以是一个资源
批处理程序,也可以弹出一个编辑器窗口。代码里可以访问到当前选中的内容(通过 Selecon
类),并据此来确定显示视图。与此类似,[ContextMenu("XXX")]可以向你的上下文菜单中添加
一个菜单项。
当你编写了一些 Component 脚本,当它被附属到某个 GameObject 时,想在编辑视图即可
在 Scene 视图观察到效果,那么你可以把[ExecuteInEditMode]写在类上方来通知编译器,该类的
OnGUI 和 Update 等函数在编辑模式也也会被调用。我们还可以使用
[AddComponentMenu("XXX/XXX")]来把该脚本关联到 Component 菜单中,点击相应菜单项即可
为 GameObject 添加该 Component 脚本。
开始编写编辑器
为了避免不必要的包含,Unity3D 的运行时和编辑器类分辨存储在不同的 Assemblies 里
(UnityEngine 和 UnityEditor)。当你准备开始编写编辑器之前,你需要 using UnityEditor 来导入
编辑器的名称空间。
有些代码可能是运行时和编辑器都需要执行的,如果你想在其中加以区分,那么可以使用
#if UNITY_EDITOR ... #endif 宏来对编辑器代码做特殊处理。
在你开始真正编写代码之前,我认为你还需要知道所有放在命名为 Editor 目录下的脚本会
在其它脚本之后进行编译,这方便了你去使用那些运行时的内容。而那些目录下的脚本是不能
访问到 Editor 目录下的内容的。所以,你最好把你的编辑器脚本写在 Editor 目录下。
如何创建自定义编辑器窗口
创建你的窗口
如果你想自定义一个可编辑的面板,那么你需要编写一个继承自 EditorWIndow 的类。通常
情况下,你还需要写一个[MenuItem]来告知编译器何时打开这个面板。这个事件的回调应该是
一个静态方法,并且返回一个窗口的实例。
评论0