json | 对象的 JSON 表示形式。 |
objectToOverwrite | 应被覆盖的对象。 |
通过读取对象的 JSON 表示形式来覆盖其数据。
此方法与 JsonUtility.FromJson 非常相似,但它不会创建一个新对象并将其加载到 JSON 数据中,而只会将 JSON 数据加载到现有对象中。这使得您能够在没有分配的情况下更新存储在类或对象中的值。
此方法在内部使用 Unity 序列化程序;因此,您传入的对象必须受序列化程序支持:它必须是 MonoBehaviour、ScriptableObject 或应用了 Serializable 特性的普通类/结构。您希望被覆盖的字段类型必须受序列化程序支持;不支持的字段将被忽略,私有字段、静态字段和应用了 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 }