发现类似的问题,但没有相同的问题:
我有一个类“Action”,它是一个ScriptableObject。
[Serializable]
public class Action : ScriptableObject
{
[SerializeField] public string ID = "";
[SerializeField] public float defaultCost = 1f;
}
我想在编辑器窗口中维护一个ReorderableList,这样我就可以轻松地创建和删除这个ScriptableObject的实例。我还希望能够使用此列表中的文本字段轻松调整ID和defaultCost字段。但是,为了做到这一点,我需要能够访问这些字段作为ReorderableList的SerializedProperty元素的子属性。
显然它应该像这样工作:(取自自定义绘制ReorderableList元素的方法)
SerializedProperty element = reorderableList.serializedProperty.GetArrayElementAtIndex(index);
EditorGUI.PropertyField
(
new Rect(x, y, width, height),
element.FindPropertyRelative("ID"),
GUIContent.none
);
但是,element.FindPropertyRelative(“ID”)仅为两个属性返回null。
我知道我的元素是正确的,因为如果我使用
Action action = element.objectReferenceValue as Action;
我能够正确检索操作对象。
总而言之,我需要找到一种方法将此ScriptableObject的字段作为SerializedProperties获取,以便我可以在自定义编辑器窗口中编辑它们。
答案 0 :(得分:1)
找到了一个可怕但功能齐全的解决方案。
通过获取其引用类型来检索对象,创建一个新的SerializedObject,在其上使用FindProperty来获取属性,然后应用更改。
SerializedObject ac = new SerializedObject(action);
EditorGUI.PropertyField
(
new Rect(x, y, width, height),
ac.FindProperty("ID"),
GUIContent.none
);
ac.ApplyModifiedProperties();