json | 该对象的 JSON 表示形式。 |
objectToOverwrite | 需要覆盖的对象。 |
从其 JSON 表示形式中读取数据来覆盖对象中的数据。
这类似于JsonUtility.FromJsonOverwrite,但它支持任何引擎对象。
请注意,此方法与结构结合使用可能无法达到你的预期效果,因为该方法按值而非按引用传递给结构。这意味着方法不会覆盖你的原始结构,而是将一个封装的结构副本传递给该方法并覆盖该副本。可以通过在你传入该方法之前制作自己封装的结构副本,然后在方法返回后再次复制值,来避免这种情况。请参见以下示例。
即使你这样做,也不能直接将 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); } }