Unity3D编辑器的使用及扩展
作者:互联网
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属性。)
具体介绍参考:https://blog.csdn.net/qq_33337811/article/details/72852342
AddComponentMenu添加组件菜单项
[AddComponentMenu("")]
在编辑器添加一个用于添加组件的菜单项,将拥有该属性的脚本添加到选中的物体上。
下面来说说相关的类:
Editor
这个类用于扩展一些编辑器全局的功能.且这个类可以和目标对象作用[CustomEditor(MyScript)];在Editor类里,可以重写OnInspectorGUI(这个用的比较多的)等方法。
EditorWindow
这个类,用于自定义一个窗口,你可以为窗口添加一些按钮,选项等。比如,如果你想弄一个任务编辑器,用于配置一些数据。那么直接可以使用该类。
它有一个OnSceneUI的事件可以监听,可以使你实现像自己的编辑器一样,在Scene中点击某个物体后,在鼠标位置显示一个菜单,或者一些操作按钮。
另外,还有一个比较适用的事件是OnHierarchyChange。当一个对象的父物体被改变,或者被新建的时候,这个事件会被触发。
EditorApplication主应用程序类
这个类提供了许多变量的访问,同时提供了Save等方法。比如,你可以新建一个编辑器脚本,在它的update函数里,进行记事,已做定时保存,从而避免不必要的损失。
这个类还提供了新建场景,打开项目等操作。
如果你是在界面下使用Unity3D,可能这个类的意义不大。但如果你是基于U3D的命令行来构建一个一键式多平台发布方案,那么这个类的地位就举足轻重了。
EditorUtility
提供了很多全局函数,并且多半是静态的。比如,你想弹出一个打开文件的对话框,或者保存文件的对话框。或者你要查看场景树中的某个对象enable是与否,都可以通过它来访问。
在这些编辑类的具体使用上参考:https://blog.csdn.net/qq_33337811/article/category/6785901
标签:Unity3D,扩展,ExecuteInEditMode,Start,编辑器,添加,Awake,Example 来源: https://www.cnblogs.com/zhonghu/p/11102775.html