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

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

效果如图:

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-28 12:02:07       75 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-28 12:02:07       80 阅读
  3. 在Django里面运行非项目文件

    2023-12-28 12:02:07       64 阅读
  4. Python语言-面向对象

    2023-12-28 12:02:07       75 阅读

热门阅读

  1. 清除conda和pip缓存的方法

    2023-12-28 12:02:07       51 阅读
  2. 正则表达式2 常见模式

    2023-12-28 12:02:07       57 阅读
  3. github和gitee上比较有影响力的python爬虫项目

    2023-12-28 12:02:07       46 阅读
  4. Spring中的@Resource/@Autowired/@Primary/@Qualifier

    2023-12-28 12:02:07       55 阅读
  5. posixpath库----Python

    2023-12-28 12:02:07       51 阅读
  6. Jetpack Compos一些三方库的使用

    2023-12-28 12:02:07       46 阅读
  7. QT6 C++ 开发指南

    2023-12-28 12:02:07       43 阅读
  8. 2312d,原始写

    2023-12-28 12:02:07       54 阅读
  9. 59.0/滤镜的使用(详细版)

    2023-12-28 12:02:07       38 阅读