编辑器扩展
更新: 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 被修改了,保存下。