UnityEditor编程常用方法
Unity官方文档-ExtendEditor
一.在编辑器菜单栏中添加自己的方法
[MenuItem(“path”)]
必须是静态方法
MenuItem最后一个参数可以控制显示顺序
[MenuItem("Tools/创建自己的工具")]
public static void CreateToolEditor()
{
Debug.Log("方法执行");
}
二.资源控制相关
1.AssetDatabase
创建资源
AssetDatabase.CreateAsset(obj, "Assets/xxx/xxx.type");
注意路径要Assets开始,且创建的资源命名要有后缀名
保存资源
AssetDatabase.SaveAssets();
该方法的官方解释:Writes all unsaved asset changes to disk.
得先让资源变成unsaved状态;所以常常和
EditorUtility.SetDirty(obj);
一起用
示例:
EditorUtility.SetDirty(obj);
AssetDatabase.SaveAssets();
加载资源
AssetDatabase.LoadAssetAtPath<Cubemap>("Assets/New Cubemap.cubemap");
资源更新
AssetDatabase.Refresh();
2.Ping命令和选中相关
高亮显示一个物体或资源,相当于鼠标击中它
EditorGUIUtility.PingObject(obj);
选中一个物体或者获取当前选中的物体
Selection.activeObject = obj;
obj = Selection.activeObject;
两者连用,用代码选中某个物体并高亮显示
三.ScriptableObject相关
创建
T obj = ScriptableObject.CreateInstance<T>();
where T : ScriptableObject
四.定制化资源显示面板
实现方式
- 编写一个Unity脚本;可以是继承MonoBehaviour的脚本,也可以是ScriptableObject类;
- 再新编写一个脚本名+Editor命名(浅显易懂)的继承Editor类的脚本;
- 在Editor脚本上引用[CustomEditor(typeof(Unity脚本))]特性;至此已经将Unity脚本和Editor脚本关联上;
- 重写OnInspectorGUI()方法;
public override void OnInspectorGUI() { base.OnInspectorGUI(); }
如果写base.OnInspectorGUI()方法,会将unity默认的东西绘制出来;
ps: 在scene视图上定制化(具体看官方文档)
public void OnSceneGUI()
{
var t = (target as LookAtPoint);
EditorGUI.BeginChangeCheck();
Vector3 pos = Handles.PositionHandle(t.lookAtPoint, Quaternion.identity);
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(target, "Move point");
t.lookAtPoint = pos;
t.Update();
}
}
一个简单的编写工具套路
1.创建一个ScriptableObject类;
2.将该ScriptableObject类实例化出来;
3.编写定制化编辑器类去绘制该ScriptableObject类在Inspector面板的显示
既能做一些数据的操作工具(运行时也适用),也能做方法执行工具