решено , исправление в коде
У меня есть класс, для которого я хочу создать собственный редактор, но я не могу заставить его работать.
Я наследую классы друг от друга, и я хочу, чтобы редактор для базового класса применялся ко всем редакторам подклассов
Я пытался использовать [CustomEditor( typeof( BaseClassName ), true )]
, согласно Документация Unity предполагается, что работает.
Но пока что только у базового класса есть собственный редактор, а подклассы получают созданный мной пользовательский редактор, игнорируя инспектор базового класса.
Я также пытался унаследовать от пользовательского класса редактора, который я создал для базового класса, но он не работал…
Базовый класс:
[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 есть только в базовом классе