json | 对象的 JSON 表示形式。 |
objectToOverwrite | 应覆盖的对象。 |
通过读取对象的 JSON 表示形式覆盖其数据。
此方法非常类似于 JsonUtility.FromJson,只是它将 JSON 数据加载到现有对象中,而不是创建新对象并将 JSON 数据加载到其中。这样,无需进行任何分配即可更新存储在类或对象中的值。
在内部,此方法使用 Unity 序列化器;因此传入的对象必须受序列化器支持:它必须是 MonoBehaviour、ScriptableObject 或应用了 Serializable 属性的普通类/结构。要覆盖的字段的类型必须受序列化器支持;不受支持的字段以及私有字段、静态字段和应用了 NonSerialized 属性的字段会被忽略。
支持任何普通类或结构,以及派生自 MonoBehaviour 或 ScriptableObject 的类。不支持其他引擎类型。只能在 Editor 中使用 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 }