如何从 JSON 解析到 Unity GameObject
Posted
技术标签:
【中文标题】如何从 JSON 解析到 Unity GameObject【英文标题】:How to parse from JSON to Unity GameObject 【发布时间】:2021-11-11 20:06:30 【问题描述】:我正在构建一个基本的应用程序来存储一些基本的字符数据。我已经将所有输入的字符数据存储为序列化数据并永久保存到 JSON 文件中。
现在我一直在试图弄清楚如何将这些数据从 JSON 中取出并放入列表中。 (我从那里知道如何实例化填充了列表中数据的新预制对象,所以这确实是我卡住的地方。)
我的 JSON 数据如下所示(如果这有助于提供如何处理它的示例):
"Items": [
"characterName": "No Name Assigned",
"chararacterCampaign": "No Campaign Assigned",
"chararacterJob": "No job Assigned",
"chararacterTown": "No town Assigned",
"chararacterRace": "No race Assigned",
"chararacterSkin": "No skin Assigned",
"chararacterEyes": "No eyes Assigned",
"chararacterHair": "No hair Assigned",
"chararacterAge": "No age Assigned",
"chararacterBuild": "No build Assigned",
"chararacterPitch": "no value",
"chararacterTexture": "no value",
"chararacterNasality": "no value",
"chararacterEnunciation": "no value",
"chararacterTonalRange": "no value",
"chararacterSpeed": "no value",
"chararacterVolume": "no value",
"chararacterAccent": "No accent Assigned"
我的代码在启动时成功读取 JSON,因为它没有覆盖预先存在的数据。到目前为止,我为解析数据而编写的代码如下所示:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[System.Serializable]
public class CharacterData
public string cName;
public string campaign;
public string job;
public string town;
public string race;
public string skin;
public string eyes;
public string hair;
public string age;
public string build;
public string pitch;
public string texture;
public string nasality;
public string enunciation;
public string tonalRange;
public string speed;
public string volume;
public string accent;
public static CharacterData CreateFromJSON(string jsonString)
return JsonUtility.FromJson<CharacterData>(jsonString);
我遇到的问题 #1 是我似乎无法将此脚本附加到任何东西,因为它不是从 MonoBehavior 继承的,所以我想我需要立即解决这个问题,但我不确定如何。
问题 #2,我真正陷入困境的地方是,我无法真正想象如何将字符串中的数据解析为我可以使用的格式。 有什么想法吗?
【问题讨论】:
我不确定你在#2 中的意思是什么?你的意思是如何使用所有这些字符串字段? 【参考方案1】:您需要创建一个属于 MonoBehaviour 类型的类,并将该组件添加到场景中的任何对象上。这是一个例子:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class JSONParser : MonoBehaviour
public CharacterData data;
void Start()
data = CharacterData.CreateFromJSON("your json string");
enter image description here enter image description here
【讨论】:
【参考方案2】:您不能反序列化继承 UnityEngine.Object
的类,例如 ScriptableObject
、MonoBehaviour
或 GameObject
。它们只能由引擎创建(例如使用Instantiate
,或专门的构造函数)。
您的方法是正确的,将反序列化为不继承任何内容的类。然后,您可以将其附加到另一个作为组件的类中的变量。仅数据类的概念通常称为“模型”或“数据传输对象”,专门针对这种情况。
class CharacterController : MonoBehaviour
private CharacterData _data;
private void Awake()
_data = CharacterData.CreateFromJSON("your json data");
// Do something with the data
【讨论】:
以上是关于如何从 JSON 解析到 Unity GameObject的主要内容,如果未能解决你的问题,请参考以下文章
使用 SimpleJSON 从 Web API 解析 Unity 中的 JSON 数据数组
C# unity (发布到安卓端中使用)解析json字符串—使用微软官方的包Newtonsoft.Json
C# unity (发布到安卓端中使用)解析json字符串—使用微软官方的包Newtonsoft.Json