如何从 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 的类,例如 ScriptableObjectMonoBehaviourGameObject。它们只能由引擎创建(例如使用Instantiate,或专门的构造函数)。

您的方法是正确的,将反序列化为不继承任何内容的类。然后,您可以将其附加到另一个作为组件的类中的变量。仅数据类的概念通常称为“模型”或“数据传输对象”,专门针对这种情况。

class CharacterController : MonoBehaviour 
    private CharacterData _data;

    private void Awake() 
        _data = CharacterData.CreateFromJSON("your json data");

        // Do something with the data
    

【讨论】:

以上是关于如何从 JSON 解析到 Unity GameObject的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Unity 解析 Json 文件

使用 SimpleJSON 从 Web API 解析 Unity 中的 JSON 数据数组

C# unity (发布到安卓端中使用)解析json字符串—使用微软官方的包Newtonsoft.Json

C# unity (发布到安卓端中使用)解析json字符串—使用微软官方的包Newtonsoft.Json

C# unity (发布到安卓端中使用)解析json字符串—使用微软官方的包Newtonsoft.Json

unity json解析IPA后续