数组中的元素数量。
如果 SerializedObject 包含单个对象,则此属性返回数组中的元素数量。
如果 SerializedObject 包含多个对象,则此属性返回最小的元素数量。这样做是为了确保 SerializedObject 的迭代仅公开所有对象中都存在的属性。
如果有多个对象并且最小的数组大小大于 SerializedObject.maxArraySizeForMultiEditing,则此属性返回 0,并且无法使用 SerializedProperty.GetArrayElementAtIndex 检索元素。
将此属性设置为小于当前大小的值会丢弃末尾的元素,并保留剩余元素的现有元素内容。将此属性设置为更大的值会通过在末尾追加新元素来增加数组大小。这些新元素的值未定义,直到显式分配一些所需内容,如下面的第二个示例所示。
其他资源:isArray、minArraySize、GetArrayElementAtIndex、InsertArrayElementAtIndex、DeleteArrayElementAtIndex、ClearArray、SerializedObject.targetObjects。
using System.Collections.Generic; using UnityEngine; using UnityEditor;
public class SerializePropertyArraySizeExample : ScriptableObject { public List<string> m_ListOfStrings = new List<string> { "zero", "one", "two" }; public string m_NotInArray = "blah";
[MenuItem("Example/SerializedProperty/ArraySize Example")] static void ArraySizeExample() { var scriptableObject = ScriptableObject.CreateInstance<SerializePropertyArraySizeExample>();
using (var serializedObject = new SerializedObject(scriptableObject)) { var arrayProperty = serializedObject.FindProperty("m_ListOfStrings"); var arraySize = arrayProperty.arraySize; var arrayElement = arrayProperty.GetArrayElementAtIndex(0);
var concatenated = "Combined array contents: "; for (int i = 0; i < arraySize; i++, arrayElement.Next(false)) { concatenated += arrayElement.stringValue + " "; } Debug.Log(concatenated); } } }
using System.Collections.Generic; using UnityEngine; using UnityEditor;
public class SerializePropertyArrayResizeExample : ScriptableObject { public List<string> m_ListOfStrings;
[MenuItem("Example/SerializedProperty/ArraySize Example 2")] static void MenuCallback() { var scriptableObject = ScriptableObject.CreateInstance<SerializePropertyArrayResizeExample>();
using (var serializedObject = new SerializedObject(scriptableObject)) { var arrayProperty = serializedObject.FindProperty("m_ListOfStrings");
// Allocate an initial size of the array arrayProperty.arraySize = 2;
// Set the desired initial content for the new elements arrayProperty.GetArrayElementAtIndex(0).stringValue = "zero"; arrayProperty.GetArrayElementAtIndex(1).stringValue = "one";
// Append another element arrayProperty.arraySize++; arrayProperty.GetArrayElementAtIndex(arrayProperty.arraySize - 1).stringValue = "two";
serializedObject.ApplyModifiedProperties(); Debug.Log("Combined array contents: " + string.Join(" ", scriptableObject.m_ListOfStrings)); } } }