版本: Unity 6 (6000.0)
语言English
  • C#

SerializedProperty.arraySize

建议修改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们会阅读用户提出的每个建议的更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

public int arraySize;

描述

数组中的元素数量。

如果 SerializedObject 包含单个对象,则此属性返回数组中的元素数量。

如果 SerializedObject 包含多个对象,则此属性返回最小的元素数量。这样做是为了确保 SerializedObject 的迭代仅公开所有对象中都存在的属性。

如果有多个对象并且最小的数组大小大于 SerializedObject.maxArraySizeForMultiEditing,则此属性返回 0,并且无法使用 SerializedProperty.GetArrayElementAtIndex 检索元素。

将此属性设置为小于当前大小的值会丢弃末尾的元素,并保留剩余元素的现有元素内容。将此属性设置为更大的值会通过在末尾追加新元素来增加数组大小。这些新元素的值未定义,直到显式分配一些所需内容,如下面的第二个示例所示。

其他资源:isArrayminArraySizeGetArrayElementAtIndexInsertArrayElementAtIndexDeleteArrayElementAtIndexClearArraySerializedObject.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)); } } }