Unity 获取序列化对象属性详解
基本步骤
1. 创建序列化对象
SerializedObject serializedObject = new SerializedObject(targetObject);
2. 获取属性迭代器
SerializedProperty iterator = serializedObject.GetIterator();
3. 遍历所有属性
while (iterator.Next(true))
{
Debug.Log($"属性路径: {iterator.propertyPath}");
Debug.Log($"属性类型: {iterator.propertyType}");
}
常用属性类型判断
基础类型
if (iterator.propertyType == SerializedPropertyType.Integer)
{
int value = iterator.intValue;
}
else if (iterator.propertyType == SerializedPropertyType.Boolean)
{
bool value = iterator.boolValue;
}
else if (iterator.propertyType == SerializedPropertyType.String)
{
string value = iterator.stringValue;
}
复杂类型
if (iterator.propertyType == SerializedPropertyType.Generic)
{
SerializedProperty arraySize = iterator.FindPropertyRelative("Array.size");
}
修改属性值
1. 开始修改
serializedObject.Update();
2. 修改值
SerializedProperty property = serializedObject.FindProperty("propertyName");
property.intValue = newValue;
3. 应用修改
serializedObject.ApplyModifiedProperties();
常用查找方法
直接查找属性
SerializedProperty property = serializedObject.FindProperty("propertyName");
查找相对属性
SerializedProperty childProperty = property.FindPropertyRelative("childName");
查找数组元素
SerializedProperty element = property.GetArrayElementAtIndex(index);
实际应用示例
修改图集设置
SerializedObject importer = new SerializedObject(spriteAtlasImporter);
var packingSettings = importer.FindProperty("m_PackingSettings");
var enableRotation = packingSettings.FindPropertyRelative("enableRotation");
enableRotation.boolValue = false;
importer.ApplyModifiedProperties();