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 }
Did you find this page useful? Please give it a rating:
Thanks for rating this page!
What kind of problem would you like to report?
Thanks for letting us know! This page has been marked for review based on your feedback.
If you have time, you can provide more information to help us fix the problem faster.
Provide more information
You've told us this page needs code samples. If you'd like to help us further, you could provide a code sample, or tell us about what kind of code sample you'd like to see:
You've told us there are code samples on this page which don't work. If you know how to fix it, or have something better we could use instead, please let us know:
You've told us there is information missing from this page. Please tell us more about what's missing:
You've told us there is incorrect information on this page. If you know what we should change to make it correct, please tell us:
You've told us this page has unclear or confusing information. Please tell us more about what you found unclear or confusing, or let us know how we could make it clearer:
You've told us there is a spelling or grammar error on this page. Please tell us what's wrong:
You've told us this page has a problem. Please tell us more about what's wrong:
Thank you for helping to make the Unity documentation better!
Your feedback has been submitted as a ticket for our documentation team to review.
We are not able to reply to every ticket submitted.