發現類似的問題,但沒有相同的:無法訪問SerializedProperty的字符串字段
我有一個類,「行動」,這是個ScriptableObject。
[Serializable]
public class Action : ScriptableObject
{
[SerializeField] public string ID = "";
[SerializeField] public float defaultCost = 1f;
}
我想保持在編輯器窗口,讓我輕鬆地創建和刪除此個ScriptableObject的實例的ReorderableList。我也希望能夠使用此列表上的文本字段輕鬆調整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」),用於兩個屬性僅返回空。
我知道我有該元素是正確的,因爲如果我用
Action action = element.objectReferenceValue as Action;
我能夠正確地獲取操作對象。
所以我只想總結一下,我需要找到一種方法來獲取這個ScriptableObject的字段作爲SerializedProperties,以便我可以在自定義的編輯器窗口中編輯它們。
這是因爲FindPropertyRelative嘗試檢索屬性,但您的ID是字段。您可以將ID更改爲像[[SerializeField] public string ID {get; set;}這樣的屬性''我不確定SerializeField是否爲屬性的有效屬性。屬性不需要Meybe屬性。然後,您需要填充默認值屬性在構造函數中,比如'this.ID =「」' –
我試圖改變我的動作類的樣子'[Serializable接口] 公共類行動:個ScriptableObject { 公共字符串ID { GET {return m_id; } set {m_id = value; } } [SerializeField] 私有字符串m_id =「」;',它似乎沒有工作。 – EmmetOT