8

我正在尝试编写一个简单的编辑器扩展,仅用于学习目的。此扩展将仅检查目标是否为 JSON 文件,然后计算它的键或执行一些其他任意任务。

这是检查器默认的样子。 这是检查器默认的样子

然后我开始编写我的自定义检查器,就​​像这样。

[CustomEditor(typeof(TextAsset))]
public class TestInspector : Editor
{
    public override void OnInspectorGUI()
    {
        DrawDefaultInspector();
    }
}

注意对 DrawDefaultInspector() 的调用。

现在检查员看起来像这样。

现在检查员看起来像这样。

为什么不绘制默认检查器?我能理解我的扩展应该基本上什么都不做,对吧?

4

2 回答 2

3

如果你想覆盖内置的文本资产检查器,你必须找到它并从你自己的编辑器中调用它。该类被调用UnityEditor.TextAssetInspector,但它是一个私有内部类,通常只能由 Unity 在内部引用。但是,您可以使用反射访问它,如下所示:

使用系统;
使用 System.Reflection;
使用 UnityEngine;
使用 UnityEditor;

[自定义编辑器(typeof(TextAsset))]
公共类 TestInspector : 编辑器
{
    私人编辑器 m_editor;

    公共覆盖无效 OnInspectorGUI()
    {
        如果(m_editor == null)
        {
            var 程序集 = AppDomain.CurrentDomain.GetAssemblies();
            foreach(程序集中的 var a)
            {
                var type = a.GetType("UnityEditor.TextAssetInspector");
                如果(类型!= null)
                {
                    m_editor = Editor.CreateEditor(目标,类型);
                    休息;
                }
            }
        }

        如果(m_editor != null)
            m_editor.OnInspectorGUI();
    }
}

这将在所有当前加载的程序集中搜索 type UnityEditor.TextAssetInspector,然后为当前资产目标创建它的实例。我们使用Editor.CreateEditor允许我们传入要创建的编辑器类型的版本,否则它将尝试创建TestInspector.

请注意,这是假设有关 Unity 内部的某些事情,并且可能不适用于 Unity 的未来版本。

于 2016-01-14T23:10:28.877 回答
2

我认为问题是 TextAsset 没有使用普通的编辑器类作为检查器。许多内置的统一类使用不公开的特殊内置编辑器类

您可以尝试更改[CustomEditor(typeof(TextAsset))][CustomEditor(typeof(Transform))][CustomEditor(typeof(Animator))]查看变换和动画师的“真正的默认检查员”与普通检查员不同

因此,如果您想制作任何自定义编辑器。不在乎默认检查员。只需从头开始。祝你好运

于 2015-09-03T03:44:05.630 回答