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

SerializedProperty.minArraySize

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

public int minArraySize;

描述

所有目标对象中数组元素的最小数量。(只读)

如果 SerializedObject 包含多个对象,则此属性返回元素的最小数量。与 SerializedProperty.arraySize 不同,即使最小大小大于 SerializedObject.maxArraySizeForMultiEditing,也会返回最小大小。在这种情况下,可以增大 SerializedObject.maxArraySizeForMultiEditing 以允许访问数组内容。

当 SerializedObject 仅包含单个对象时,此属性的行为与 SerializedProperty.arraySize 相同,并返回真实的数组大小。

其他资源: arraySizeisArraySerializedObject.targetObjects

using UnityEditor;
using UnityEngine;

public class MinArraySizeExample : ScriptableObject { public int[] m_data;

[MenuItem("Example/SerializedProperty MinArraySize Example")] static void TestMethod() { const int largeArraySize = 100; // Larger than the default maxArraySizeForMultiEditing value of 64

MinArraySizeExample obj1 = ScriptableObject.CreateInstance<MinArraySizeExample>(); obj1.m_data = new int[largeArraySize];

for (int i = 0; i < largeArraySize; i++) obj1.m_data[i] = i;

// Second object with its own copy of the large array MinArraySizeExample obj2 = ScriptableObject.CreateInstance<MinArraySizeExample>(); obj2.m_data = obj1.m_data;

// Create serialized object for manipulating both objects SerializedObject serializedObject = new SerializedObject(new Object[] { obj1, obj2 }); SerializedProperty property = serializedObject.FindProperty("m_data");

// arraySize returns 0 but minArraySize returns largeArraySize Debug.LogFormat("Array Size: {0}\nMin Array Size: {1}\nMax Array Size: {2}", property.arraySize, property.minArraySize, serializedObject.maxArraySizeForMultiEditing);

// Any call to GetArrayElementAtIndex() at this point would fail

// Extend the max permitted array size serializedObject.maxArraySizeForMultiEditing = property.minArraySize;

// Now arraySize returns largeArraySize, and the elements can be retrieved Debug.LogFormat("New Array Size: {0}, Last element: {1}", property.arraySize, property.GetArrayElementAtIndex(largeArraySize - 1).intValue); } }