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

SerializedObject.Update

Declaration

public void Update();

Описание

Обновить представление сериализованного объекта.

При создании SerializedObject целевые объекты сериализуются, а API SerializedObject и SerializedProperty дают доступ к этому сериализованному представлению на чтение и запись. Если один или несколько целевых объектов изменяются — через другой экземпляр SerializedObject или прямой записью, — внутреннее сериализованное представление может рассинхронизироваться. Вызов Update() заново сериализует целевые объекты, и SerializedObject снова отражает их актуальное состояние.

Вызов Update() отбросит любые локально изменённые свойства, которые еще не были применены.

Дополнительные ресурсы: SerializedObject.hasModifiedProperties, SerializedObject.ApplyModifiedProperties

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

public class SerializeObjectUpdate : ScriptableObject { public int m_Field = 1;

[MenuItem("Example/SerializedObject Update")] static void UpdateExample() { var scriptableObject = ScriptableObject.CreateInstance<SerializeObjectUpdate>(); var sb = new StringBuilder();

using (var serializedObject = new SerializedObject(scriptableObject)) { SerializedProperty field = serializedObject.FindProperty("m_Field");

// Change underlying object scriptableObject.m_Field = 2;

// SerializedObject still thinks value is 1 sb.Append($"SerializedObject value before Update: {field.intValue} ");

//hasModifiedProperties returns false because no changes have been made via SerializedProperty API sb.Append($"(SerializedObject dirty: {serializedObject.hasModifiedProperties}), ");

// Update so that SerializedObject sees the new value serializedObject.Update(); sb.AppendLine($"after Update: {field.intValue}");

// Another scenario is when Update is called while there are pending changes in the SerializedObject field.intValue = 3; sb.Append($"SerializedObject value before Update: {field.intValue} "); sb.Append($"(SerializedObject dirty: {serializedObject.hasModifiedProperties}), ");

// Value reverts back to 2, because ApplyModifiedProperties was not called // and SerializedObject has been put back in sync with the object's state serializedObject.Update(); sb.AppendLine($"after Update: {field.intValue}. (Dirty: {serializedObject.hasModifiedProperties})");

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