Skip to content

编辑器扩展 ​

更新: 10/10/2026 字数: 0 字 时长: 0 分钟

Comming Soon...

绘制 Gizmos:

cs
void OnDrawGizmos() {}
void OnDrawGizmosOnSelected() {}

菜单栏:

cs
[MenuItem("Tools/Do Something %g")] // Ctrl + G 快捷键
static void DoSomething() {}

Context Menu:

cs
[ContextMenu("Reset")]
void Reset() {}

扩展 Inspector:

cs
namespace Editor
{
    // 所有使用了 UnityEditor 命名空间的脚本,都需要放在 Editor 文件夹下
    [CustomEditor(typeof(MyComponent))]
    public class MyComponentEditor : Editor
    {
        public override void OnInspectorGUI()
        {
            if (GUILayout.Button("上按钮"))
            {
                // 执行某些操作
            }
            base.OnInspectorGUI();
            if (GUILayout.Button("下按钮"))
            {
                // 执行某些操作
            }
        }
    }
}

创建自定义窗口:

cs
public class MyWindow : EditorWindow
{
    [MenuItem("Tools/My Window")]
    public static void ShowWindow()
    {
        // 创建并显示窗口
        GetWindow<MyWindow>("My Window");
    }

    private void OnGUI()
    {
        // 在窗口中绘制内容
        GUILayout.Label("这是一个自定义窗口", EditorStyles.boldLabel);
        if (GUILayout.Button("点击我"))
        {
            Debug.Log("按钮被点击了!");
        }
    }
}

AssetDatabase ​

AssetDatabase 是 Unity Editor 专用的资源数据库 API,用于在编辑器环境中操作 Assets 文件夹里的资源。

比如你有:

Assets
└── Editor
    └── Data
        └── MyConfig.asset

你想在 Editor 工具里拿到它:

cs
using UnityEditor;
using UnityEngine;

var config = AssetDatabase.LoadAssetAtPath<MyConfig>
(
    "Assets/Editor/Data/MyConfig.asset"
);

1. 加载资源 ​

cs
var texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/Icon.png");

2. 创建 ScriptableObject 资源 ​

例如你的 Editor 数据:

cs
var database = ScriptableObject.CreateInstance<MyDatabase>();

AssetDatabase.CreateAsset
(
    database,
    "Assets/Editor/Data/MyDatabase.asset"
);

AssetDatabase.SaveAssets();

这相当于代码创建一个 .asset 文件。

3. 查找资源 ​

比如找所有 ScriptableObject:

cs
var guids = AssetDatabase.FindAssets
(
    "t:ScriptableObject"
);

foreach (var guid in guids)
{
    var path = AssetDatabase.GUIDToAssetPath(guid);
    Debug.Log(path);
}

4. 修改资源 ​

比如:

cs
EditorUtility.SetDirty(config);
AssetDatabase.SaveAssets();

告诉 Unity:这个 asset 被修改了,保存下。