Unity读取json的工具类JsonUtility

首先我们需要定义我们的json文件,我们可以在Resources文件夹下面创建一个.json的文件,写上如下内容

{
"infoList":
[
{"panelTypeString":"ItemMessage",
"path":"UIPanel/ItemMessagePanel"},

{"panelTypeString":"Knapsack",
"path":"UIPanel/KnapsackPanel"},

{"panelTypeString":"MainMenu",
"path":"UIPanel/MainMenuPanel"},

{"panelTypeString":"Shop",
"path":"UIPanel/ShopPanel"},

{"panelTypeString":"Skill",
"path":"UIPanel/SkillPanel"},

{"panelTypeString":"System",
"path":"UIPanel/SystemPanel"},

{"panelTypeString":"Task",
"path":"UIPanel/TaskPanel"}

]
}

内置的json类虽然方便但是也有缺陷,不能用于读取文本内容,我们使用的时候必须转换为对象读取,本章我们本来是想使用枚举来定义panelTypeString的值的,但是发现这个方法对于枚举并不友好,所以进行了一下改进

创建一个PanelInfo的脚本,用来存放我们的json内容。

[Serializable]
public class UIPanelInfo :ISerializationCallbackReceiver {
    [NonSerialized]
    public UIPanelType panelType;
    public string panelTypeString;
    public string path;

    // 反序列化   从文本信息 到对象
    public void OnAfterDeserialize()
    {
        UIPanelType type = (UIPanelType)System.Enum.Parse(typeof(UIPanelType), panelTypeString);
        panelType = type;
    }

    public void OnBeforeSerialize()
    {

    }
}

public enum UIPanelType  {
    ItemMessage,
    Knapsack,
    MainMenu,
    Shop,
    Skill,
    System,
    Task
}

注意使用序列化Serializable的时候需要引用system这个命名空间
对于枚举我们需要单独声明不需要序列化,否则编译不能执行,因为序列化不支持枚举所以我们在UIPanelType 前面打上NonSerialized标签。

解析完成后下面我们就可以对这个数据进行读取了
创建一个UIManager类

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class UIManager  {

    /// 单例模式的核心
    /// 1,定义一个静态的对象 在外界访问 在内部构造
    /// 2,构造方法私有化

    private static UIManager _instance;

    public static UIManager Instance
    {
        get
        {
            if (_instance == null)
            {
                _instance = new UIManager();
            }
            return _instance;
        }
    }
    ///构造函数
    private UIManager()
    {
        ParseUIPanelTypeJson();
    }

    private Dictionary<UIPanelType, string> panelPathDict;//存储所有面板Prefab的路径

    ///序列化json对象(必须有)
    [Serializable]
    class UIPanelTypeJson
    {
        public List<UIPanelInfo> infoList;//这个名字要和json数据中的对象对应
    }
    ///读取json对象的内容
    private void ParseUIPanelTypeJson()
    {
        panelPathDict = new Dictionary<UIPanelType, string>();

        TextAsset ta = Resources.Load<TextAsset>("UIPanelType");

        UIPanelTypeJson jsonObject = JsonUtility.FromJson<UIPanelTypeJson>(ta.text);

        foreach (UIPanelInfo info in jsonObject.infoList)
        {
            //Debug.Log(info.panelType);
            panelPathDict.Add(info.panelType, info.path);
        }
    }

    /// <summary>
    /// just for test
    /// </summary>
    public void Test()
    {
        string path;
        panelPathDict.TryGetValue(UIPanelType.Knapsack, out path);
        Debug.Log(path);
        panelPathDict.TryGetValue(UIPanelType.ItemMessage, out path);
        Debug.Log(path);
        panelPathDict.TryGetValue(UIPanelType.MainMenu, out path);
        Debug.Log(path);
        panelPathDict.TryGetValue(UIPanelType.Shop, out path);
        Debug.Log(path);
        panelPathDict.TryGetValue(UIPanelType.Skill, out path);
        Debug.Log(path);
        panelPathDict.TryGetValue(UIPanelType.System, out path);
        Debug.Log(path);
        panelPathDict.TryGetValue(UIPanelType.Task, out path);
        Debug.Log(path);

    }
}

这样通过调用我们的测试方法就可以看到文件里面的内容了,如果内容没有错误就说明解析完成了

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Test : MonoBehaviour {

    // Use this for initialization
    void Start () {
        UIManager.Instance.Test();
    }

    // Update is called once per frame
    void Update () {

    }
}

这里写图片描述

pass:功能单一,胜在轻便小巧,限制有点多。

### 回答1: 可以参考以下案例: 1. Unity官方提供的JSON解析示例: Unity官方提供了一个名为JSONUtility工具类,可以帮助解析JSON数据,使用起来比较方便。官方文档中提供了详细的说明和示例代码,可以在Unity官网上查看。 2. 第三方JSON解析库: 除了Unity官方提供的工具类之外,也可以考虑使用第三方JSON解析库,例如Json.NET、LitJSON等,这些库功能更加强大,使用也比较方便,可以在GitHub上查找相应的开源项目。 3. 在线资源: 在网上可以找到很多关于Unity读取JSON配置表的教程和案例,例如在博客园、CSDN等网站上可以找到一些详细的教程和示例代码,也可以在一些Unity开发者社区中咨询其他开发者的经验和建议。 ### 回答2: 在使用Unity读取JSON配置表方面,有一些可以参考的案例和方法。 首先,可以参考Unity官方文档中关于JSON读取的相关说明。Unity提供了JsonUtility,可以用于将JSON字符串和Unity对象之间进行序列化和反序列化。 其次,可以参考一些开源项目或社区资源。例如,Json.NET是一个流行的JSON处理库,可以方便地将JSON字符串转换为C#对象。在Unity中使用Json.NET需要将其导入为一个插件。 另外,还有一些第三方插件或扩展可以帮助简化JSON读取的过程。其中,LitJson是一款轻量级的JSON处理库,易于使用且性能良好。JsonUtilityPlus是一个针对UnityJSON处理工具,提供了一些额外的特性和功能,如JSON对象中属性的动态解析。 除了以上的案例和方法,也可以通过搜索引擎或社区论坛来寻找更多关于Unity读取JSON配置表的实例和经验分享,这将提供更多的参考和指导。 ### 回答3: 当使用Unity读取JSON配置表时,有许多可以参考的案例和资源可以帮助你完成任务。以下是几个可供参考的案例: 1. Unity官方文档:Unity提供了详细的文档和教程来帮助开发者学习如何读取和解析JSON文件。你可以在Unity官方网站上找到相关的文档,并按照其中的指导逐步实现JSON读取功能。 2. GitHub仓库:许多开发者在GitHub上分享了自己的代码和项目,其中包括使用Unity读取JSON配置表的例子。你可以在GitHub上搜索相关关键词,如"Unity JSON"或"Unity JSON parsing",然后浏览代码库来寻找适合你需求的项目。 3. Unity Asset Store:Unity Asset Store是一个在线商店,提供了许多扩展和插件供Unity开发者使用。你可以在Asset Store中搜索JSON相关的插件或工具,这些插件通常包含了用于读取和解析JSON的功能。 4. 社区论坛和博客:在Unity的官方或非官方社区论坛上,许多开发者分享了自己读取JSON配置表的经验和代码片段。你可以参与讨论或搜索相关帖子来获取灵感和帮助。 总之,通过查阅官方文档、GitHub、Unity Asset Store和社区论坛以及博客,你可以找到许多参考案例和资源,帮助你在Unity读取和解析JSON配置表。记得仔细研究代码和文档,并根据你的实际需求进行适当的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值