Unity加载配置文件【解析Json】

Json 文件

Json文件的存储:

存储在StreamingAssets目录下的:
//这里用了游戏配置表常用的Json存储格式-对象数组

{"data":[{"id": 1001,"name": "ScreenFront_1",},{"id": 1002,"name": "ScreenLeft_1",},{"id": 1003,"name": "ScreenRight_1",},{"id": 1004,"name": "ScreenBottom_1",},{"id": 1005,"name": "Logo_1",},]
}

Json文件的解析:

定义本地存储结构

定义本地数据结构,添加序列化标签[System.Serializable]

using System.Collections.Generic;[System.Serializable]
public class ConfigData {public bool debug { get; set; }public bool debugConsole { get; set; }public int logDeleteTime { get; set; }public int debugLevel { get; set; }public bool connectWs { get; set; }public bool debugMultiPlayer { get; set; }public bool allowSetCave { get; set; }public int playerCount { get; set; }public int noBodyTime { get; set; }public float video360Volume { get; set; }public float roiRadius { get; set; }public bool allowClose { get; set; }public int uiPlan { get; set; }}[System.Serializable]
public class ArrObject {public string child { get; set; }public int age { get; set; }
}[System.Serializable]
public class ObjObject {public string parent { get; set; }public int age { get; set; }
}public class AppData
{public AppItem[] data;
}
public class AppItem
{public string name;public string description;public string picture;public string appName;public string appUrl;
}public class UIData
{public UIElement[] data;
}public class UIElement
{public int id { get; set; }public string name { get; set; }   
}

反序列化Json到本地数据结构

    void MergeJson(){// Merge all JSON files in the json folderstring jsonFolderPath = Application.streamingAssetsPath + "/json";List<string> jsonFiles = new List<string>(Directory.GetFiles(jsonFolderPath, "*.json"));foreach (string filePath in jsonFiles){string fileName = Path.GetFileName(filePath).Split('.')[0];switch (fileName){case "config":data = ReadJsonFile<ConfigData>(filePath);break;case "display":display = ReadJsonFile<DisplayConfig.DisplayConfigData>(filePath);break;case "apps":appsData = ReadJsonFile<AppData>(filePath);break;case "UIElements":uiData = ReadJsonFile<UIData>(filePath);break;default:break;}}}

ReadJson 方法

 public static T ReadJsonFile<T>(string filePath){string readData = File.ReadAllText(filePath);// 支持数组嵌套的情况return JsonConvert.DeserializeObject<T>(readData);}

JsonConvert.DeserializeObject(readData);
来自于Newtonsoft.Json 库
用于将参数中的字符串文本反序列化到T泛型的实例化数据结构。(可自定义序列化过程)
返回类型可空

运行时调用

可以将Merge()方法做成单例。在程序一开始时,显示的调用。
也可以在配置文件更新数据【热更新时】动态地去更新本地数据结构。
在本地数据结构不为空时,在其他模块拿到里面的数据。

例. 加载UI图片

1.实例化本地存储结构

private IList<UIElement> uiDataList;
uiDataList = new List<UIElement>(ConfigManager.Instance.uiData.data);

2.读取本地(已Merge过的数据)

 public void InitializeImageByName(string targetName,int width,int height,GameObject targetObject){foreach (var item in uiDataList){if(item.name == targetName){ResourcesManager.Instance.InitializeImageFromStreamingAssets(ResPath.StreamingUIDir, item.name, width, height,targetObject);}}}

item.name 即访问到了
image.png
的name 属性。
后续从资源管理器加载对应UI资源即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义 el-select 和 el-input 样式

文章目录 需求分析el-select 样式input 样式 需求 自定义 选择框的下拉框的样式和输入框 分析 el-select 样式 .select_box{// 默认placeholder:deep .el-input__inner::placeholder {font-size: 14px;font-weight: 500;color: #3E534F;}// 默认框状态样式更改:deep .el-inp…

U-Shape Transformer for Underwater Image Enhancement(用于水下图像增强的U型Transformer)总结

背景 现有的水下数据集或多或少存在图像数量少、水下场景少、甚至不是真实场景等缺点&#xff0c;限制了数据驱动的水下图像增强方法的性能。此外&#xff0c;水下图像在不同颜色通道和空间区域的衰减不一致也没有统一的框架。 贡献 1&#xff09;提出了一种处理 UIE 任务的…

《洛谷深入浅出进阶篇》同余方程+中国剩余定理——洛谷P1495

这篇文章讲介绍&#xff1a;同余方程&#xff0c;中国剩余定理 什么是同余方程&#xff1f; xy &#xff08;mod p&#xff09;这样的&#xff0c;带同余号的式子就是同余方程。 什么是中国剩余定理&#xff1f; 中国剩余定理&#xff0c;顾名思义是出自中国&#xff0c;它…

CoSeR: Bridging Image and Language for Cognitive Super-Resolution

主页&#xff1a;CoSeR: Bridging Image and Language for Cognitive Super-Resolution (coser-main.github.io) 图像超分辨率技术旨在将低分辨率图像转换为高分辨率图像&#xff0c;从而提高图像的清晰度和细节真实性。这项技术在手机拍照等领域有着广泛的应用和需求。随着超…

Redis5新特性-stream

Stream队列 Redis5.0 最大的新特性就是多出了一个数据结构 Stream&#xff0c;它是一个新的强大的 支持多播的可持久化的消息队列&#xff0c;作者声明 Redis Stream 地借鉴了 Kafka 的设计。 生产者 xadd 追加消息 xdel 删除消息&#xff0c;这里的删除仅仅是设置了标志位&am…

vue.js el-table 动态单元格列合并

一、业务需求&#xff1a; 一个展示列表&#xff0c;表格中有一部分列是根据后端接口动态展示&#xff0c;对于不同类型的数据展示效果不一样。如果接口返回数据是’类型1‘的&#xff0c;则正常展示&#xff0c;如果是’类型2‘的数据&#xff0c;则合并当前数据的动态表格。…

RTSP流媒体播放器

rtsp主要还是运用ffmpeg来搭建node后端转发到前端&#xff0c;前端再播放这样的思路。 这里讲的到是用两种方式&#xff0c;一种是ffmpeg设置成全局来实现&#xff0c;一种是ffmpeg放在本地目录用相对路径来引用的方式。 ffmpeg下载地址&#xff1a;http://www.ffmpeg.org/do…

焊接专业个人简历(通用25篇)

如果大家想在焊接行业的求职中脱颖而出&#xff0c;轻松斩获心仪职位&#xff0c;参考这25篇通用的焊接专业个人简历案例&#xff0c;无论您是初学者还是资深焊工&#xff0c;都能从中找到适合自己的简历内容。参考这些简历&#xff0c;让您的求职之路更加顺畅。 焊接专业个人…

软件工程 课后题 选择 查缺补漏

在一张状态图中只能有一个初态&#xff0c;而终态则可以没有&#xff0c;也可以有多个 所有的对象可以成为各种对象类&#xff0c;每个对象类都定义了一组 方法 通过执行对象的操作可以改变对象的属性&#xff0c;但它必须经过 消息 的传递 UML应用于 基于对象的面向对象的方…

nn.AdaptiveAvgPool2d(output_size)输入和输出怎么回事?

前言 nn.AdaptiveAvgPool2d(output_size) 函数作用&#xff1a;自适应进行平均池化。不用管输入、stride、padding&#xff0c;函数参数只有输出大小&#xff0c;其他的这个函数帮你搞定。 问题就是&#xff0c;我想知道他是咋搞定的&#xff1f; 1 函数的使用 先把例子摆上…

年底了,项目预算怎么创建?9个步骤直接搞定

如果将项目比作一辆汽车&#xff0c;那么预算就是它的燃料。就像汽车需要汽油一样&#xff0c;项目也需要资金和资源来维持运转。而作为项目经理&#xff0c;应该尽量用最有效的方式规划和使用这些资源&#xff0c;使项目按时交付。 项目预算是一项计划&#xff0c;其中详细说…

Gorm框架入门

文章目录 安装连接数据库Gorm基本示例自动迁移创建数据行查询数据更新数据删除数据 Gorm Model主键表名列名 时间戳CreatedAtUpdatedAtDeletedAt GORM&#xff08;Go Object Relational Mapper&#xff09;是一个在Go语言中使用的对象关系映射&#xff08;ORM&#xff09;库。它…

C++基础 -37- 模板函数与普通函数调用规则

当模板函数比普通函数更好匹配形参的时候&#xff0c;会优先调用模板函数 #include "iostream"using namespace std;template <class T> void show(T a, T b) {cout << a << endl;cout << b << endl;cout << "temp show&…

【MATLAB源码-第92期】基于simulink的QPSK调制解调仿真,采用相干解调对比原始信号和解调信号。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 QPSK&#xff0c;有时也称作四位元PSK、四相位PSK、4-PSK&#xff0c;在坐标图上看是圆上四个对称的点。通过四个相位&#xff0c;QPSK可以编码2位元符号。图中采用格雷码来达到最小位元错误率&#xff08;BER&#xff09; —…

销售时如何站在客户角度思考问题?

销售时如何站在客户角度思考问题&#xff1f; 好的&#xff0c;以下是对提供的内容进行润色后的结果&#xff1a; 当销售时&#xff0c;如何站在客户的角度去思考问题呢&#xff1f;这需要我们具备一种换位思考的能力&#xff0c;从客户的角度出发&#xff0c;了解他们的需求…

INFINI Easysearch 与华为鲲鹏完成产品兼容互认证

何为华为鲲鹏认证 华为鲲鹏认证是华为云围绕鲲鹏云服务&#xff08;含公有云、私有云、混合云、桌面云&#xff09;推出的一项合作伙伴计划&#xff0c;旨在为构建持续发展、合作共赢的鲲鹏生态圈&#xff0c;通过整合华为的技术、品牌资源&#xff0c;与合作伙伴共享商机和利…

前端传参中带有特殊符号导致后端接收时乱码或转码失败的解决方案

文章目录 bug背景解决思路1&#xff1a;解决思路2解决思路3&#xff08;最终解决方案&#xff09;后记 bug背景 项目中采用富文本编辑器后传参引起的bug&#xff0c;起因如下&#xff1a; 数据库中存入的数据会变成这种未经转码的URL编码 解决思路1&#xff1a; 使用JSON方…

【已解决】为什么Word文档里有部分内容无法编辑?

小伙伴们是否遇到过这样的情况&#xff0c;打开Word文档进行编辑&#xff0c;发现部分内容可正常编辑&#xff0c;另外一部分内容却无法编辑。这是怎么回事&#xff0c;又要如何解决呢&#xff1f; 出现以上情况&#xff0c;一般是Word文档被设置了“限制保护”&#xff0c;使…

C++ 系列 第五篇 C++ 算术运算符及类型转换

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建&#xff08;WSL 方向&#xff09;-CSDN博客 C 系列 第二篇 你真的了解C吗&#xff1f;本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 C 系列 第四篇 C 数据类型…

94.STM32外部中断

目录 1.什么是 NVIC&#xff1f; 2.NVIC寄存器 3.中断优先级 4.NVIC的配置 设置中断分组​编辑 配置某一个中断的优先级 5.什么是EXTI 6.EXTI和NVIC之间的关系 7.SYSCFG 的介绍 1.什么是 NVIC&#xff1f; NVIC是一种中断控制器&#xff0c;主要用于处理 ARM Cort…