我正在尝试制作自定义编辑器,但无法从数组中的可编写脚本对象中获取值。这是包含 CharacterData 可脚本化对象的 FightData 脚本。
public class FightData : ScriptableObject {
public CharacterData [] enemyDatas;
}
CharacterData 包含统计信息。
public class CharacterData : ScriptableObject {
public CharacterStats stats;
}
这是 CharacterStats
[System.Serializable]
public class CharacterStats
{
public float HP;
public float damage;
public float defense;
public float attackInterval;
public CharacterStats(){
HP = 0f;
damage = 0f;
defense = 0f;
attackInterval = 2f;
}
}
我想总结所有统计数据并将它们显示在 FightData 的自定义编辑器中。但统计数据始终为空。这是我的方法:
[CustomEditor(typeof(FightData))]
public class FightDataEditor : Editor
{
SerializedProperty _enemyDatas;
private void OnEnable() {
_enemyDatas = serializedObject.FindProperty("enemyDatas");
}
public override void OnInspectorGUI(){
serializedObject.Update();
EditorGUILayout.PropertyField(_enemyDatas);
var result = 0f;
int length = _enemyDatas.arraySize;
for (int i = 0; i < length; i++)
{
SerializedProperty stats = _enemyDatas.GetArrayElementAtIndex(i).serializedObject.FindProperty("stats");
if(stats == null){
Debug.Log(stats);
continue;
}
result += stats.FindPropertyRelative("HP").floatValue;
result += stats.FindPropertyRelative("damage").floatValue;
result += stats.FindPropertyRelative("defense").floatValue;
}
EditorGUILayout.Space();
EditorGUILayout.LabelField("Total Power", EditorStyles.boldLabel);
EditorGUILayout.FloatField(result);
serializedObject.ApplyModifiedProperties();
}
}