Unity 6.3
0 онлайн 21 гостей 3 в системе
Вход

SerializedProperty.minArraySize

Declaration

public int minArraySize;

Описание

Наименьшее число элементов в массиве по всем целевым объектам. (только для чтения)

Если SerializedObject содержит несколько объектов, это свойство возвращает наименьшее число элементов. В отличие от SerializedProperty.arraySize минимальный размер возвращается даже если он больше SerializedObject.maxArraySizeForMultiEditing. В этом случае SerializedObject.maxArraySizeForMultiEditing может быть увеличен, чтобы разрешить доступ к содержимому массива.

Когда SerializedObject содержит только один объект, это свойство ведет себя так же, как SerializedProperty.arraySize и возвращает истинный размер массива.

Дополнительные ресурсы: arraySize, isArray, SerializedObject.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); } }