【Unity】使用类对象存储Json数据——星座运势案例

发布时间:2025-11-23 03:26

下面这篇文章会通过星座运势案例来给大家介绍使用类对象存储Json数据,如果对这块内容感兴趣的开发人员可以学习下。

【效果预览】

工程的结构:注意LitJson和System.Json文件必须要放到Plugins文件夹下面,这是Unity内置的一个文件夹,打包后会优先加载该文件夹内的dll文件

以保证代码的正确运行

脚本的分布情况:下面会一一展开各个脚本文件

Json文件的数据结构如下:这里面我没有选择全部的信息,只选了部分作为测试

【接收数据】首先定义了三个数据模型,用来保存数据:

【注意】类中的属性名字,必须和Json数据中你想要接收的字段名字相同才行,否则无法接收到数据

using UnityEngine; using System.Collections; public class Star_Result {// 某个星座的今日运势public string astroid{set;get;}public string astroname{set;get;}public Today today{set;get;}// 【保存的是另外一个url的星座信息】public AllStar allStar{set;get;} }

using UnityEngine; using System.Collections; public class Today {public string date{ set; get;}public string presummary{set;get;} }

using UnityEngine; using System.Collections; public class AllStar {public string astroid{set;get;}public string astroname{set;get;}public string date{ set; get;}public string pic{ set; get;} }

【下载数据】

using UnityEngine; using System.Collections; using LitJson; using System.Collections.Generic; using UnityEngine.UI; public class Star:MonoBehaviour {// 定义一个继承Mono的伪单例,为了方便View层数据的访问public static Star InstanceStar;private List<Star_Result> star_list;// 只读属性,里面保存了12星座的所有信息public List<Star_Result> Star_list {get {return star_list;}}private string currentTime;void Awake(){star_list = new List<Star_Result> ();StartCoroutine ("DownLoadStarToday");// 给伪单例赋值,this表示当前脚本所在的游戏对象InstanceStar = this;currentTime = System.DateTime.Now.ToString ("yyyy-MM-dd");}void Start(){}IEnumerator DownLoadStarToday(){Debug.Log ("loadData");// 【数据的加载】Star_Result star_result;AllStar allStar;// 下载12次,每次下载一个星座的所有信息,保存到list里面// 但是这个url中,不包含allStar属性同名的key,所以赋值之后,所有的allStar属性,都是空的for (int id = 1; id <= 12; id++) {string url = "http://api.jisuapi.com/astro/fortune?astroid="+id+"&date=" + currentTime + "&appkey=d30bee9929c039fc";WWW www = new WWW (url);yield return www;// 把字符串转换成JsonData对象JsonData data = JsonMapper.ToObject (www.text);string str = JsonMapper.ToJson (data ["result"]);// 把字符串转换成类对象:过程是将Json字符串中的key与对象中的属性名一一匹配// 如果对象中的属性名=Json字符串中的key,就将key所对应的值保存到类对象的属性中star_result = JsonMapper.ToObject<Star_Result> (str);star_list.Add (star_result);}Debug.Log("star->OK");//--------------------------------------------------------------------------// 下载12星座的【星座生日】【星座图标】string url3 = "http://api.jisuapi.com/astro/all?appkey=d30bee9929c039fc";WWW www2 = new WWW (url3);yield return www2;JsonData data2 = JsonMapper.ToObject (www2.text);//--------------------------------------------------------------------------for (int id = 0; id < 12 ; id++) {// 将JsonData对象转换成字符串string str2 = JsonMapper.ToJson (data2 ["result"][id]);// 将字符串转换成AllStar的类对象(把Json数据中值存储到类对象的属性中去)allStar = JsonMapper.ToObject<AllStar> (str2);// 分别给每一个star_list内的元素的allStart属性赋值star_list [id].allStar = allStar;}Debug.Log ("AllStar");//--------------------------------------------------------------------------// 【数据的显示】GetComponent<ShowUI>().StarEnumerator();} }

【将数据显示到UI上】

using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; public class ShowUI : MonoBehaviour {// 所有按钮的父物体private Transform StarGroup;// 按钮图片的数组private RawImage[] button_images;// 星座运势信息的父物体private Transform StarInfo;private Text DateAndStar;private Text Presummary;void Start(){StarGroup = GameObject.Find ("StarGroup").transform;button_images = new RawImage[StarGroup.childCount];for (int i = 0; i < StarGroup.childCount; i++) {button_images [i] = StarGroup.GetChild (i).GetComponent<RawImage> ();}//--------------------------------------------------------------------------StarInfo = GameObject.Find ("StarInfo").transform;DateAndStar = StarInfo.GetChild (0).GetComponent<Text> ();Presummary = StarInfo.GetChild (1).GetComponent<Text> ();}public void StarEnumerator(){StartCoroutine ("SetButtonData");}IEnumerator SetButtonData(){// 根据按钮的数量,下载图片for (int i = 0; i < button_images.Length; i++) {// 根据按钮的索引去获取图片的地址WWW www3 = new WWW (Star.InstanceStar.Star_list [i].allStar.pic);// 等待:等待图片的下载完成,再继续执行后面的代码yield return www3;// 下载完之后,将得到的图片赋值给按钮上的图片button_images [i].texture = www3.texture;// transform.Find这个方法,是获取当前对象的子物体button_images [i].transform.Find ("XingZuo").GetComponent<Text> ().text = Star.InstanceStar.Star_list [i].allStar.astroname;button_images [i].transform.Find ("Date").GetComponent<Text> ().text = Star.InstanceStar.Star_list [i].allStar.date;}// 按钮的监听事件for (int i = 0; i < button_images.Length; i++) {button_images [i].GetComponent<Button> ().onClick.AddListener (()=>{// 获取当前选中的对象在同级别中索引int index = EventSystem.current.currentSelectedGameObject.transform.GetSiblingIndex();// 根据索引读取不同的数据模型DateAndStar.text = Star.InstanceStar.Star_list[index].today.date;DateAndStar.text += " "+Star.InstanceStar.Star_list[index].astroname;Presummary.text = Star.InstanceStar.Star_list[index].today.presummary;});}} }

网址:【Unity】使用类对象存储Json数据——星座运势案例 https://mxgxt.com/news/view/1891132

相关内容

星环科技携手客户,获“星河(Galaxy)”案例数据智能底座&数据库专项赛道三个案例殊荣
Hadoop实战案例—直播数据统计与分析
星座运势系统搭建(平台,现成案例
DCOS应用案例(三):【文章】分类与热词推荐
大数据在零售业的主要优势及四个真实的应用案例
python数据可视化案例——力导向图,网络图,关系图(使用pyecharts,networkx,echarts,js)
数字储存档案:磁带
大数据运营案例(分享四个经典的大数据营销案例,带你了解大数据的魅力)
星座配对查询表引发热议:大数据揭示情感关系新趋势
打渔日历API接口全解析:每日更新摸鱼日报、明星段子、新闻简报等多元化内容,支持图片与JSON格式输出,助力开发者打造个性化内容展示与数据分析,提升产品竞争力与用户粘性!

随便看看