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

JsonUtility.FromJsonOverwrite

Declaration

public static void FromJsonOverwrite(string json, object objectToOverwrite);

Параметры

Параметр Описание
json-файл JSON представление объекта.
objectToOverwrite Объект, который должен быть перезаписан.

Описание

Перезапись данных в объекте путем чтения из его представления JSON.

Этот метод очень похож на JsonUtility.FromJson, за исключением того, что вместо создания нового объекта и загрузки в него данных JSON, он загружает данные JSON в существующий объект. Это позволяет обновлять значения, хранящиеся в классах или объектах, без каких-либо распределений.

Внутренне этот метод использует серийизатор Unity. Создаваемый объект и все его поля должны соответствовать требованиям для серийизации серийизатором Unity. Полный список этих требований см. в Правила сериализации в руководстве.

FromJsonOverwrite поддерживает любой обычный класс, а также классы, производные от MonoBehaviour или ScriptableObject. Другие типы движка не поддерживаются. Только в редакторе можно использовать EditorJsonUtility.FromJsonOverwrite перезаписать другие объекты двигателя.

Примечание: С FromJsonOverwrite принимает ссылочный тип, поэтому передача структуры (типа-значения) требует аккуратного боксирование и распаковка и не рекомендуется. Вместо этого используйте JsonUtility.FromJson для структур следующим образом: JsonUtility.FromJson<MyStruct>(json);

Если поле объекта не присутствует в представлении JSON, то это поле будет оставлено без изменений.

FromJsonOverwrite может быть вызвана из фоновых потоков. Вы не должны изменять объект, который перезаписывается, пока функция выполняется.

using UnityEngine;

public class PlayerState : MonoBehaviour { public string playerName; public int lives; public float health;

public void Load(string savedData) { JsonUtility.FromJsonOverwrite(savedData, this); }

// Given JSON input: // {"lives":3, "health":0.8} // the Load function will change the object on which it is called such that // lives == 3 and health == 0.8 // the 'playerName' field will be left unchanged }