Version: 2021.2
public static void FromJsonOverwrite (string json, object objectToOverwrite);

参数

json 对象的 JSON 表示形式。
objectToOverwrite 要覆盖的对象。

描述

通过读取对象的 JSON 表示形式覆盖其数据。

这类似于 JsonUtility.FromJsonOverwrite,但它支持任何引擎对象。可用字段与可通过 SerializedObject API 访问的字段或通过 YAML 序列化形式的对象找到的字段相同。

请注意,将此方法与结构结合使用可能无法达到预期效果,因为结构是按值而非引用传递给方法的。这意味着,方法并不会覆盖原始结构,而是结构的装箱副本将传递给方法并被覆盖。为避免发生这种情况,您可以将自己的结构装箱副本传递给方法,然后在方法返回后再将值复制过来。请参阅以下示例。

即使这样做,Unity 的内置结构(例如 Vector3Bounds)也无法直接传递给方法,因此您必须将 Unity 的内置结构包含在封装器类或结构中。

using UnityEngine;
using UnityEditor;

[System.Serializable] struct MyStruct { public int value; }

public class StructExample : MonoBehaviour { void Start() { MyStruct myStruct = new MyStruct(); object boxedStruct = myStruct; var json = @"{ ""value"" : 42 }"; EditorJsonUtility.FromJsonOverwrite(json, boxedStruct); myStruct = (MyStruct)boxedStruct; Debug.Log("myStruct.value = " + myStruct.value); } }