无法访问SerializedProperty的字符串字段

时间:2017-01-04 11:12:24

标签: c# unity3d unity5

发现类似的问题,但没有相同的问题:

我有一个类“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获取,以便我可以在自定义编辑器窗口中编辑它们。

1 个答案:

答案 0 :(得分:1)

找到了一个可怕但功能齐全的解决方案。

通过获取其引用类型来检索对象,创建一个新的SerializedObject,在其上使用FindProperty来获取属性,然后应用更改。

SerializedObject ac = new SerializedObject(action);

EditorGUI.PropertyField
(
new Rect(x, y, width, height),
ac.FindProperty("ID"),
GUIContent.none
);

ac.ApplyModifiedProperties();