Appearance
编辑器扩展
编辑器扩展是什么
Unity 编辑器扩展就是:用 C# 改造 Unity Editor,让开发者更快、更安全地做项目。 它不是玩家运行时功能,而是开发阶段用的工具,比如:自定义 Inspector、菜单按钮、工具窗口、批量处理资源、配置检查。
你先记住这条主线
Editor 脚本 → 入口 → 界面 → 修改数据 → 保存变化
最常见的入口有:
MenuItem:给 Unity 顶部菜单加按钮。EditorWindow:做一个可停靠的工具窗口。CustomEditor:改某个组件在 Inspector 里的显示方式。PropertyDrawer:改某一种字段的绘制方式。SerializedObject / SerializedProperty:安全编辑 Inspector 数据,支持 Undo、多对象编辑、Prefab 覆盖。AssetDatabase:查找、创建、加载、刷新资源。Selection / EditorUtility:读取当前选中的对象、弹窗确认等。
最小菜单示例
c
using UnityEditor;
using UnityEngine;
public static class MyMenu
{
[MenuItem("Tools/Say Hello")]
private static void SayHello()
{
Debug.Log("Hello Editor");
}
}这个脚本要放在:
c
Assets/Editor/MyMenu.cs因为它用了 UnityEditor。运行时代码不能直接引用 UnityEditor,否则打包可能失败。
最小自定义 Inspector 示例
c
using UnityEditor;
[CustomEditor(typeof(EnemyConfig))]
public class EnemyConfigEditor : Editor
{
private SerializedProperty hp;
private void OnEnable()
{
hp = serializedObject.FindProperty("hp");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(hp);
serializedObject.ApplyModifiedProperties();
}
}这里你要理解: serializedObject.Update() 是读取最新数据; PropertyField 是画字段; ApplyModifiedProperties() 是把修改写回去,并尽量保持 Undo、Prefab 覆盖等 Unity 编辑器能力正常。
学习顺序
先学 MenuItem,你能立刻做按钮。 再学 CustomEditor + SerializedProperty,你就能改 Inspector。 然后学 EditorWindow,开始做真正的小工具。 再学 PropertyDrawer,把字段显示做得更专业。 最后补 AssetDatabase、Undo、Selection,工具就会越来越像 Unity 原生功能。
参考链接Unity EditorWindowUnity MenuItemUnity CustomEditorUnity SerializedObjectUnity PropertyDrawerUnity Editor 文件夹规则Unity Undo.RecordObjectUnity AssetDatabase