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

SerializedProperty.arraySize

Declaration

public int arraySize;

Описание

Количество элементов в массиве.

Если 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)); } } }