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

SerializedObject.GetIterator

建议更改

成功!

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

关闭

提交失败

由于某些原因,无法提交您建议的更改。请过几分钟<a>再试一次</a>。感谢您花时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public SerializedProperty GetIterator();

说明

获取第一个序列化属性。

您可以使用此属性遍历目标对象的所有属性。通常,当已知所需的字段名称时,最好使用 FindProperty 以更快地检索关联的 SerializedProperty。不过当面对需要扫描不同类型的对象的更通用代码(如在提前未知所需属性名称时),此方法会很有用。

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