已解决,修复在代码中
我有一些类想要为其创建自定义编辑器,但我无法使其工作。
我的类相互继承,并且我希望基类的编辑器将应用于所有子类编辑器
我尝试使用[CustomEditor( typeof( BaseClassName ), true )]
,根据 Unity documentation它应该可以工作。
但是,只有基类有自定义编辑器,子类获取我从它们生成的自定义编辑器,忽略基类检查器。
我还尝试从我为基类创建的自定义编辑器类继承,但它不起作用......
基类:
[CustomEditor(typeof(ScriptableObjects.CharacterData), true)]
public class CharacterEditor : Editor
{
private SerializedProperty characterName, characterTexture, characterNormalMap;
private bool texturesFoldout = false;
protected void OnEnable()
{
characterName = serializedObject.FindProperty("characterName");
characterTexture = serializedObject.FindProperty("characterTexture");
characterNormalMap = serializedObject.FindProperty("characterNormalMap");
}
public override void OnInspectorGUI()
{
serializedObject.Update();
EditorGUILayout.PropertyField(characterName);
texturesFoldout = EditorGUILayout.Foldout(texturesFoldout, "Textures");
if (texturesFoldout)
{
EditorGUILayout.PropertyField(characterTexture);
EditorGUILayout.PropertyField(characterNormalMap);
}
serializedObject.ApplyModifiedProperties();
}
}
子类:
[CustomEditor(typeof(ScriptableObjects.SoldierData))]
public class SoldierEditor : CharacterEditor
{
private SerializedProperty life, autoAttack, skills;
protected new void OnEnable()
{
base.OnEnable();
life = serializedObject.FindProperty("life");
autoAttack = serializedObject.FindProperty("autoAttack");
skills = serializedObject.FindProperty("skills");
}
public override void OnInspectorGUI()
{
// base.DrawDefaultInspector(); The mistake
base.OnInspectorGUI(); // The FIX!
serializedObject.Update();
EditorGUILayout.PropertyField(life);
EditorGUILayout.PropertyField(autoAttack);
EditorGUILayout.PropertyField(skills);
serializedObject.ApplyModifiedProperties();
}
}
图片:
如您所见,纹理 Foldout 仅在基类中
最佳答案
当您重写字符编辑器时,您永远不会调用基本方法。您需要添加 base.OnEnable();到Soldier编辑器的OnEnable方法和base.OnInspectorGUI();到 Soldier 编辑器的 OnInspectorGUI 方法,以便他们利用基类的功能。
此外,注释就像命名约定一样,任何从 Editor 派生的东西都应该称为 Editor。因此,为了清楚起见,这些类应该称为CharacterEditor 和SoldierEditor。
关于c# - Unity中的自定义编辑器继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315854/