在 Unity 中获取 Object 对象的编辑器对象

2023-12-27 17:44:16

有这个需求的原因是,在编辑器的?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("拓展按钮"))
        {
        }
    }
}

效果如图:

文章来源:https://blog.csdn.net/WPAPA/article/details/135250606
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。