json | 对象的 JSON 表示形式。 |
objectToOverwrite | 要覆盖的对象。 |
通过读取对象的 JSON 表示形式覆盖其数据。
这类似于 JsonUtility.FromJsonOverwrite,但它支持任何引擎对象。可用字段与可通过 SerializedObject API 访问的字段或通过 YAML 序列化形式的对象找到的字段相同。
请注意,将此方法与结构结合使用可能无法达到预期效果,因为结构是按值而非引用传递给方法的。这意味着,方法并不会覆盖原始结构,而是结构的装箱副本将传递给方法并被覆盖。为避免发生这种情况,您可以将自己的结构装箱副本传递给方法,然后在方法返回后再将值复制过来。请参阅以下示例。
即使这样做,Unity 的内置结构(例如 Vector3 或 Bounds)也无法直接传递给方法,因此您必须将 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); } }