[英]Show the array in the Inspector (Unity)
您是否嘗試在聲明數組時將系統序列化置於腳本之上?
[System.Serializable]
public AudioClip[] ClipArray;
數組中的任何值是否最初設置為 null?
這是自定義編輯器中數組/列表的一個眾所周知的問題。
如果你簽出EditorGUILayout.PropertyField
你會看到有一個參數的重載
包括兒童
如果為true
,則繪制包括孩子在內的財產; 否則只有控件本身(例如只有一個折頁但下面沒有任何內容) 。
所以實際上你需要做的就是傳遞true
就像
SerializedProperty ClipArray;
// I would always do these only once ;)
private void OnEnable()
{
ClipArray = serializedObject.FindProperty("ClipArray");
}
private void OnInspectorGUI ()
{
serializedObject.Update();
EditorGUILayout.PropertyField(ClipArray, true);
serializedObject.ApplyModifiedProperties();
}
作為替代方案,您當然也可以自己構建具有所需字段的整個繪圖層次結構:
private void OnInspectorGUI ()
{
serializedObject.Update();
ClipArray.isExpanded = EditorGUILayout.Foldout(ClipArray.isExpanded, ClipArray.name);
if(ClipArray.isExpanded)
{
EditorGUI.indentLevel++;
// The field for item count
ClipArray.arraySize = EditorGUILayout.IntField("size", ClipArray.arraySize);
// draw item fields
for(var i = 0; i< ClipArray.arraySize; i++)
{
var item = ClipArray.GetArrayElementAtIndex(i);
EditorGUILayout.PropertyField(item, new GUIContent($"Element {i}");
}
EditorGUI.indentLevel--;
}
serializedObject.ApplyModifiedProperties();
}
我只是把它留在這里,因為手動構建這些東西曾經幫助我了解編輯器的工作原理。
注意:在智能手機上輸入(→ 可能有錯誤)但我希望這個想法變得清晰
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.