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

SerializedObject.GetIterator

Declaration

public SerializedProperty GetIterator();

Описание

Получить первое серийное свойство.

Вы можете использовать этот метод для просмотра всех свойств целевого объекта. Обычно, когда имя требуемого поля известно, лучше использовать FindProperty для получения связанных SerializedProperty быстрее. Однако этот метод может быть полезным для более общего кода, который должен сканировать различные типы объектов, e.g. когда имена требуемых свойств не известны заранее.

Дополнительные ресурсы: FindProperty, SerializedProperty.NextVisible, SerializedProperty.Reset.

using System;
using System.Text;
using UnityEngine;
using UnityEditor;

public class SerializeObjectGetIteratorExample : ScriptableObject { public bool m_FirstField;

[MenuItem("Example/SerializedObject GetIterator")] static void GetIteratorExample() { // Each Unity Object has some internal properties that will be serialized. // Some of these are visible in the inspector, others are hidden. // Typically they can be ignored, but when using SerializedObject.GetIterator() they // appear prior to the C# fields. var scriptableObject = ScriptableObject.CreateInstance<SerializeObjectGetIteratorExample>();

using (var serializedObject = new SerializedObject(scriptableObject)) { SerializedProperty iterator = serializedObject.GetIterator();

var sb = new StringBuilder(); sb.AppendLine("Visible Internal Properties:");

// GetIterator returns a root that is above all others (depth -1) // so first property is found by stepping into the children bool visitChildren = true; iterator.NextVisible(visitChildren);

// For rest of scan stay at the same level (depth 0) visitChildren = false;

do { if (iterator.name == "m_FirstField") break; // Found first field from the C# object

sb.AppendLine($"\t{iterator.name}"); } while (iterator.NextVisible(visitChildren));

// Repeat, using "Next" to show the hidden properties as well as visible sb.AppendLine("All Internal Properties:");

iterator.Reset(); visitChildren = true; iterator.Next(visitChildren); visitChildren = false;

do { if (iterator.name == "m_FirstField") break; sb.AppendLine($"\t{iterator.name}"); } while (iterator.Next(visitChildren));

Debug.Log(sb.ToString()); } } }