汇总一些Unity Editor开发的常用方法和实现方式,会持续更新。
添加自定义菜单栏方法
using UnityEngine;
using UnityEditor;
public class EditorTools : EditorWindow
{
[MenuItem("EditorTools/自定义的编辑器方法")]
public static void CustomEditroFunction()
{
Debug.Log("Here is your code...");
}
}
如图一,添加自定义的菜单栏需要使用UnityEditor的命名空间,我们自定义的EditorTools类需要继承EditorWindow类。然后就是定义菜单栏点击后所执行的具体函数CustomEditroFunction,这里需要注意的是函数需要是静态函数,需要增加static关键字。MenuItem方法则是定义菜单栏的路径,菜单栏路径可以采用中文。图二则是自定义菜单栏的效果。
EditorWindow类文档连接:https://docs.unity3d.com/cn/2022.2/ScriptReference/EditorWindow.html
添加Inspector中脚本自定义方法
using UnityEngine;
using UnityEngine.UI;
using UnityEditor;
[CustomEditor(typeof(Text), true)]
public class TextEditor : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
CustomTextFunction();
}
private void CustomTextFunction()
{
if (GUILayout.Button("清空内容"))
{
Text text = (Text)target;
text.text = string.Empty;
}
}
}
这里我们为Unity原有的Text脚本增加功能按钮,添加自定义功能。
如图一,首先还是需要使用UnityEditor命名空间,自定义类TextEditor继承自Editor。通过覆写OnInspectorGUI方法实现Inspector中脚本的绘制,DrawDefaultInspector为绘制默认视图。接下来CustomTextFunction则是我们自定义的部分,通过GUILayout.Button("清空内容")方法绘制自定义按钮,if语句中则是点击按钮后的自定义功能,这里示例的则是清除了Text内容。实际效果如图二。
在示例代码中需要注意的是,[CustomEditor(typeof(Text), true)]指定了Inspector自定义脚本的类型,会为指定的自定义脚本添加功能。基类Editor包含成员target,通过target可以获取指定的脚本对象。
Editor类文档连接: https://docs.unity3d.com/cn/2022.2/ScriptReference/Editor.html