【转载】【Unity插件】LitJson杂谈
来源:互联网 发布:2016淘宝漏洞赚钱方法 编辑:程序博客网 时间:2024/05/16 10:23
距离上一次更新博客已有一段时间了,一实习就懒了,嘿嘿。这次谈一下在实习里新碰到的一个Unity插件——LitJson(也可以去官网下载最新版)。
版权声明:本文为博主原创文章,未经博主允许不得转载。[因为博主不允许转载,博主看到请原谅我,主要是你写的太好了]
开场白
LitJson是一个开源项目,比较小巧轻便,安装也很简单,在Unity里只需要把LitJson.dll放到Plugins文件夹下,并在代码的最开头添加“Using
关于和服务器数据之间的转换在此就不再赘述,官网以及一些博客里已有涉及,而且也比较详细了。
这里,主要谈一下LitJson的其他用途。
想象一个场景,你需要显示一个家庭信息的表格,这个表格的每一行代表了你的一个家人的名字、年龄、手机号码和住址等信息。因为这个信息不大,用数据库实在是大材小用,而且也很麻烦。
我们可以用一个数据结构来在代码里表示每个家人的信息:
- public
class FamilyInfo { -
public string name; -
public int age; -
public string tellphone; -
public string address; - }
然后用一个List来表示家庭信息表:
- public
class FamilyList { -
public List family_list; - }
最后,打印信息:
- private
void DisplayFamilyList(FamilyList familyList) { -
if (familyList null)== return; -
-
foreach (FamilyInfo ininfo familyList.family_list) { -
Debug.Log("Name:" + "info.name + Age:" + "info.age + Tel:" + "info.tellphone + Addr:" + info.address); -
} - }
准备工作都已经做好,那么数据到底在什么时候初始化呢?
第一种方法
一种方法是我们可以在编辑面板里直接初始化。为了达到目的,我们还需要告诉Unity编辑器在面板里显示我们的FamilyInfo,以便我们可以随机编辑,这是通过在类名前声明
[System.Serializable]来实现的。
具体代码如下:
- sing
System.Collections; - using
System.Collections.Generic; - using
LitJson; -
- [System.Serializable]
- public
class FamilyInfo { -
public string name; -
public int age; -
public string tellphone; -
public string address; - }
-
- [System.Serializable]
- public
class FamilyList { -
public List family_list; - }
-
- public
class LitJsonSample : MonoBehaviour { -
-
public FamilyList null;m_FamilyList = -
-
// Use this for initialization -
void Start () { -
DisplayFamilyList(m_FamilyList); -
} -
-
private void DisplayFamilyList(FamilyList familyList) { -
if (familyList null)== return; -
-
foreach (FamilyInfo ininfo familyList.family_list) { -
Debug.Log("Name:" + "info.name + Age:" + "info.age + Tel:" + "info.tellphone + Addr:" + info.address); -
} -
} -
-
// Update is called once per frame -
void Update () { -
-
} - }
但是这种方法灵活性太差,而且很容易发生错误。例如当我们不小心改变了变量名称,那么我们在面板里编辑好的数据就都会不见了!下面介绍另一种比较好的方法——把数据保存为本地的一个文本文件。
第二种方法
- {
-
"family_list": [ -
{ -
"name" : "candycat", -
"age" : 21, -
"tellphone" : "xxx", -
"address" : "xxx" -
}, -
{ -
"name" : "candycat#", -
"age" : 22, -
"tellphone" : "xxx", -
"address" : "xxx" -
}, -
{ -
"name" : "candycat##", -
"age" : 23, -
"tellphone" : "xxx", -
"address" : "xxx" -
} -
] - }
代码如下:
- using
UnityEngine; - using
UnityEditor; - using
System.Collections; - using
System.Collections.Generic; - using
LitJson; -
- public
class FamilyInfo { -
public string name; -
public int age; -
public string tellphone; -
public string address; - }
-
- public
class FamilyList { -
public List family_list; - }
-
- public
class LitJsonSample : MonoBehaviour { -
-
public FamilyList null;m_FamilyList = -
-
// Use this for initialization -
void Start () { -
ReloadFamilyData(); -
-
DisplayFamilyList(m_FamilyList); -
} -
-
private void ReloadFamilyData() -
{ -
UnityEngine.TextAsset s = Resources.Load("Localize/family") as TextAsset; -
string tmp = s.text; -
m_FamilyList = JsonMapper.ToObject( tmp ); -
if ( JsonMapper.HasInterpretError() ) -
{ -
Debug.LogWarning( JsonMapper.GetInterpretError() ); -
} -
} -
-
private void DisplayFamilyList(FamilyList familyList) { -
if (familyList null)== return; -
-
foreach (FamilyInfo ininfo familyList.family_list) { -
Debug.Log("Name:" + "info.name + Age:" + "info.age + Tel:" + "info.tellphone + Addr:" + info.address); -
} -
} -
-
// Update is called once per frame -
void Update () { -
-
} - }
有几点注意的地方:
- Resources.Load("Localize/family")表示加载family文件,但一定要注意要把family.txt文件放在Resources文件夹下,只有这样Resources.Load才能够访问到,在这个例子里family的绝对路径为“Resources/Localize/family”。这是因为Resources文件夹是Unity默认的资源文件夹,有着特殊的用途,这里我还不是很了解,以后要深入学习一下;
- Resources.Load参数中的路径名一定不可以包含后缀,这里也就是.txt后缀;
注意
- 若包含Dictionary结构,则key的类型必须是string,而不能是int类型(如需表示id等),否则无法正确解析!
- 若需要小数,要使用double类型,而不能使用float,可后期在代码里再显式转换为float类型。
结束语
- 【转载】【Unity插件】LitJson杂谈
- 【Unity插件】LitJson杂谈
- litjson插件的使用
- 【Unity3D插件】在Unity中读写文件数据:LitJSON快速教程
- 【Unity3D插件】在Unity中读写文件数据:LitJSON快速教程 - 王选易
- 【Unity3D插件】在Unity中读写文件数据:LitJSON快速教程
- [转载][Unity插件]DOTween基础
- unity插件制作(转载)
- Unity3D LitJSON 插件使用教程
- Unity 读写Json数据:LitJSON快速教程
- Unity (C#) 使用 LitJson 处理 JSON 数据
- Unity 读写Json数据:LitJSON快速教程
- Unity (C#) 使用 LitJson 处理 JSON 数据
- Unity中使用LitJson产生的bug
- litjson
- Litjson
- LitJson
- Unity 视频播放杂谈
- MyEclipse个性化代码注释模板
- unity3D学习【功能实现】之九:鼠标拖动图片
- unity3D学习【功能实现】之十:关卡制作scroll rect应用以及一些代码
- 代码调试
- MySQL开启general_log跟踪数据
- 【转载】【Unity插件】LitJson杂谈
- [原创]Json学习--litjson的生成和…
- 160815笔记
- 在网络传输中图片质量的控制
- 2016CCPC网预 HDU 5839 Special Tetrahedron
- 将博客搬至CSDN
- 亿级Web系统搭建——单机到分布式集群
- SDUTACM 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- codeforces 327A. Flipping Game