obj | 要转换为 JSON 格式的对象。 |
prettyPrint | 如果为 true,则格式化输出以提高可读性。如果为 false,则格式化输出以使大小最小化。默认值为 false。 |
string 该对象的 JSON 格式数据。
生成对象的公共字段的 JSON 表示形式。
在内部,此方法使用 Unity 序列化器;因此,您传入的对象必须受序列化器支持:它必须是 MonoBehaviour、ScriptableObject 或带有 Serializable 属性的普通类/结构体。您想要包含的字段类型必须受序列化器支持;不受支持的字段将被忽略,私有字段、静态字段和带有 NonSerialized 属性的字段也将被忽略。
任何普通类或结构体都受支持,以及从 MonoBehaviour 或 ScriptableObject 派生的类。其他引擎类型不受支持。(仅在编辑器中,您可以使用 EditorJsonUtility.ToJson 将其他引擎类型序列化为 JSON)。
如果对象包含对其他 Unity 对象的引用字段,则这些引用通过记录每个被引用对象的 InstanceID 来序列化。由于 Instance ID 充当内存中对象实例的句柄,因此 JSON 字符串只能在 Unity 引擎的同一会话期间反序列化回。
请注意,虽然可以将基本类型传递给此方法,但结果可能与您预期不同;该方法不会直接序列化它们,而是会尝试序列化它们的公共实例字段,从而产生一个空对象。类似地,将数组传递给此方法不会产生包含每个元素的 JSON 数组,而是产生一个包含数组对象本身的公共字段的对象(其中没有字段)。要序列化数组或基本类型的实际内容,有必要将其包装在类或结构体中。
此方法可以从后台线程调用。在执行期间,您不应更改传递给此函数的对象。
其他资源:MonoBehaviour、ScriptableObject、Object.GetInstanceID
using UnityEngine;
public class PlayerState : MonoBehaviour { public string playerName; public int lives; public float health;
public string SaveToString() { return JsonUtility.ToJson(this); }
// Given: // playerName = "Dr Charles" // lives = 3 // health = 0.8f // SaveToString returns: // {"playerName":"Dr Charles","lives":3,"health":0.8} }