已解决,此修复已在代码中
我有一些要为其创建自定义编辑器的类,但是我无法使其正常工作。
我的类彼此继承,我希望基类的编辑器可以应用于所有子类编辑器
根据Unity documentation的假设,我尝试使用[CustomEditor( typeof( BaseClassName ), true )]
。
但是,只有基类具有自定义编辑器,而子类将获得我从它们生成的自定义编辑器,而忽略基类检查器。
我也尝试从我为基类创建的自定义编辑器类继承,但是没有用……
基类:
[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仅在基类中
答案 0 :(得分:2)
覆盖字符编辑器时,永远不会调用基本方法。您需要添加base.OnEnable();到士兵编辑器的OnEnable方法和base.OnInspectorGUI();到士兵编辑器的OnInspectorGUI方法,以便他们利用基类的功能。
此外,作为命名约定的注释,任何来自Editor的内容都应称为Editor。因此,为清楚起见,这些类应称为CharacterEditor和SoldierEditor。