赞
踩
有这个需求的原因是,在编辑器的 Inspector 逻辑中,写了许多生成逻辑。
现在不想挨个在 Inspector 上都点一遍按钮,所以就需要能获取到它们的编辑器对象。
发现可以借助官方的 UnityEditor.Editor.CreateEditor 方法达到目的,如下:
- public static TEditor GetEditorObjByRuntimeObj<TEditor>(UnityEngine.Object runtimeObj)
- where TEditor : UnityEditor.Editor
- {
- var editorType = typeof(TEditor);
- var editorObj = UnityEditor.Editor.CreateEditor(runtimeObj, editorType) as TEditor;
-
- return editorObj;
- }
如果我们想扩展 Unity 的原生组件,也可以借助这个方法来实现。
- [CustomEditor(typeof(Transform))]
- public class TransformExt : Editor
- {
- private Editor m_editor;
-
- void OnEnable()
- {
- var assembly = Assembly.GetAssembly(typeof(Editor));
- var type = assembly.GetType("UnityEditor.TransformInspector", true);
- m_editor = Editor.CreateEditor(target, type);
- }
-
- public override void OnInspectorGUI()
- {
- // base.OnInspectorGUI();
-
- // 调用系统绘制方法
- m_editor.OnInspectorGUI();
-
- GUILayout.Space(5);
- if (GUILayout.Button("拓展按钮"))
- {
- }
- }
- }
效果如图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。