首页 > 解决方案 > 如何从 Json 加载游戏对象?有可能吗?

问题描述

我正在尝试保存对象的位置、旋转和缩放。除此之外,我可以将 Gameobject 本身保存在 json 中。我将 JSON 文件保存在 Application.persistentDataPath 中。下面是我的数据处理程序类

  using System;
  using UnityEngine;

[Serializable]
public class DataHandlers

{
public Vector3 localposinmap;
public Quaternion localrotinmap;
public Vector3 sizeofobj;
public GameObject gameobj;

public DataHandlers(Vector3 localpos, Quaternion localrot, Vector3 objsize,GameObject gobj)

{
    this.localposinmap = localpos;
    this.localrotinmap = localrot;
    this.sizeofobj = objsize;
    this.gameobj = gobj;

}


}

保存文件后,我的 JSON 字符串如下

{

"SaveValues": [
{
  "localposinmap": {
    "x": 0.0237075537443161,
    "y": -0.27374106645584106,
    "z": -0.6681503057479858
  },
  "localrotinmap": {
    "x": 0,
    "y": -0.08031735569238663,
    "z": 0,
    "w": -0.996769368648529
  },
  "sizeofobj": {
    "x": 1,
    "y": 1,
    "z": 1
  },
  "gameobj": {
    "m_FileID": -112,
    "m_PathID": 0
  }
},
{
  "localposinmap": {
    "x": 0.09054452180862427,
    "y": -0.273919016122818,
    "z": -0.5062751770019531
  },
  "localrotinmap": {
    "x": 0.0001220703125,
    "y": 0.06480370461940765,
    "z": 0,
    "w": -0.9978980422019958
  },
  "sizeofobj": {
    "x": 1,
    "y": 1,
    "z": 1
  },
  "gameobj": {
    "m_FileID": -456,
    "m_PathID": 0
  }
}
 ]
}

阅读 gameobj: "m_FileID":-456 和 "m_PathID":0 后,我可以读回这个值并使用上述详细信息实例化相同的 Gameobject 吗?

标签: c#iosunity3d

解决方案


您可以使用JsonUtility.ToJson将对象更改为 json 字符串并将JsonUtility.FromJson其取回。查看Unity 文档以获取更多信息。记住:

仅支持普通的类和结构;不是从 UnityEngine.Object 派生的类(例如 MonoBehaviour 或 ScriptableObject)。


推荐阅读