簡體   English   中英

在 Inspector (Unity) 中顯示數組

[英]Show the array in the Inspector (Unity)

我有一個要在檢查器中顯示的數組列表

這是我的代碼:

        SerializedProperty ClipArray;
        ClipArray = serializedObject.FindProperty("ClipArray"); // public AudioClip[] ClipArray;



        serializedObject.Update();
        EditorGUILayout.PropertyField(ClipArray);
        serializedObject.ApplyModifiedProperties();

但是在檢查器中,我顯示了一個沒有參數的數組

在此處輸入圖片說明

您是否嘗試在聲明數組時將系統序列化置於腳本之上?

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM