json | オブジェクトの JSON 表現 |
objectToOverwrite | 上書きする必要があるオブジェクト |
JSON 表現から読み取ることでオブジェクトのデータを上書きします。
このメソッドは JsonUtility.FromJson によく似ています。新しいオブジェクトを作成し、 JSON データをそれに読み込ませる代わりに既存のオブジェクトに JSON データを読み込こませます。クラスやオブジェクトに割り当てを行わずに格納されている値を更新することができます。
内部的には、このメソッドは Unity のシリアライザーを使用します。したがって、渡すオブジェクトをシリアライザーでサポートする必要があります。それは MonoBehaviour、ScriptableObject や Serializable 属性を適用しているプレーンのクラスや構造体である必要があります。上書きしたいフィールドのタイプはシリアライザーによってサポートされてなければなりません。private フィールド、static フィールドや NonSerialized 属性を適用しているフィールドのようにサポートされていないフィールドは無視されます。
プレーンなクラスや構造体は、MonoBehaviour や ScriptableObject から派生したクラスと同様にサポートされます。他のタイプはサポートされていません。エディターの中でのみ、 EditorJsonUtility.FromJsonOverwrite を使用して他のオブジェクトを上書きできます。
オブジェクトのフィールドが JSON 表現に存在しない場合はそのまま残されます。
このメソッドの文字列を取るバージョンは、バックグラウンドスレッドから呼び出されます。関数実行中に、上書きされているオブジェクトを変更しないでください。このメソッドの TextAsset を取るバージョンは、バックグラウンドスレッドから呼び出すことはできません。
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 }