【发布时间】:2019-01-22 20:17:50
【问题描述】:
已解决,修复在代码中
我有一些类想要为其创建自定义编辑器,但我无法让它工作。
我的类相互继承,我希望基类的编辑器将应用于所有子类编辑器
我已经尝试使用[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();
}
}
图片:
如您所见,纹理折叠仅在基类中
【问题讨论】:
标签: c# unity3d inheritance editor