我正在尝试编写一个简单的编辑器扩展,仅用于学习目的。此扩展只会检查目标是否是JSON文件,然后计算它的键或执行其他任意任务。
这是默认情况下检查器的外观。
然后我开始编写自定义检查器,就像这样。
[CustomEditor(typeof(TextAsset))]
public class TestInspector : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
}
}
请注意对DrawDefaultInspector()的调用。
现在检查员看起来像这样。
为什么不绘制默认检查器?我能理解我的扩展基本上什么都不做,对吧?
答案 0 :(得分:2)
我认为问题是TextAsset不使用普通的编辑器类进行检查。许多内置的统一类使用特殊的内置编辑器类,这是非公开的
您可以尝试将[CustomEditor(typeof(TextAsset))]
更改为[CustomEditor(typeof(Transform))]
或[CustomEditor(typeof(Animator))]
,以查看" Real Default Inspector"变换和动画制作者与普通人不同
所以如果你想制作任何自定义编辑器。不要关心默认检查员。从头开始吧。祝你好运
答案 1 :(得分:2)
如果要覆盖内置文本资源检查器,则必须找到它并从您自己的编辑器中调用它。该类称为UnityEditor.TextAssetInspector
,但它是一个私有内部类,通常只能由Unity在内部引用。但是,您可以使用以下反射访问它:
using System; using System.Reflection; using UnityEngine; using UnityEditor; [CustomEditor(typeof(TextAsset))] public class TestInspector : Editor { private Editor m_editor; public override void OnInspectorGUI() { if (m_editor == null) { var assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var a in assemblies) { var type = a.GetType("UnityEditor.TextAssetInspector"); if (type != null) { m_editor = Editor.CreateEditor(target, type); break; } } } if (m_editor != null) m_editor.OnInspectorGUI(); } }
这将搜索所有当前加载的程序集UnityEditor.TextAssetInspector
,然后为当前资产目标创建它的实例。我们使用Editor.CreateEditor
版本让我们传入要创建的编辑器类型,否则它将尝试创建TestInspector
的实例。
请注意,这是假设Unity内部的某些内容,并且可能在Unity的未来版本中不起作用。