最好用的 unity3d Json数据传输,插件JsonFx !!
来源:互联网 发布:网络信息安全组制定 编辑:程序博客网 时间:2024/05/19 17:58
之前用过一些插件,都是根据取key值来得value。感觉操作起来很麻烦,特别是在unity3d游戏数值比较多的情况下。
比如一个得到Json,先序列化,然后["name"] = xxx, ["hp"] = xxx, ["fuck"] = XX,
麻烦,效率低,字符串不能批量改名,代码写出来有一堆,恶心!
之下介绍一个插件。JSONFX,百度一下,你找不到,Google一下,你能知道,原因不解释。
下面直接用代码来、文字、和截图来分析JsonFx的用法与妙处:
我的工程目录:
自己封装了一个类,用来读取文件,名字为ReadFileTool。 代码有注释可以自己看。
/****************************************************************************** * * Maintaince Logs: * 2013-01-06 WP Initial version. * 2013-01-10 WP Added:FetchLevelByTXTFile(),FetchLevel(),FetchItem() * *****************************************************************************/using UnityEngine;using System.Collections;using System.Collections.Generic;using JsonFx.Json;/// <summary>/// use for external call/// </summary>public class ReadFileTool : MonoBehaviour{ /// <summary> /// 根据一个JSON,得到一个类 /// </summary> static public T JsonToClass<T>(string json) where T : class { T t = JsonReader.Deserialize<T>(json); return t; } /// <summary> /// 根据一个JSON的文件地址,得到一个类 /// </summary> static public T AddressToClass<T>(string txtAddress) where T : class { TextAsset jsonData = Resources.Load(txtAddress) as TextAsset; return JsonToClass<T>(jsonData.text); } /// <summary> /// 将JSON转换为一个类数组 /// </summary> static public T[] JsonToClasses<T>(string json) where T : class { //Debug.Log(json); T[] list = JsonReader.Deserialize<T[]>(json); return list; } /// <summary> /// 给Json文件的地址。转换为一个类数组 /// </summary> static public T[] AddressToClasses<T>(string txtAddress) where T : class { TextAsset jsonData = Resources.Load(txtAddress) as TextAsset; return JsonToClasses<T>(jsonData.text); }}
目录下的players.txt文件内容为:
[{"name":"ant","health":20,"maxHealth":20,"speed":1,"attackPower":6,"attackRate":1.5,"attackRange":1,"lastAttackTime":0},
{"name":"goblin","health":60,"maxHealth":60,"speed":0.5,"attackPower":7,"attackRate":1.5,"attackRange":1,"lastAttackTime":0},
{"name":"groundArrow1","health":10,"maxHealth":10,"speed":1,"attackPower":3,"attackRate":1,"attackRange":1,"lastAttackTime":0},
{"name":"groundArrow2","health":50,"maxHealth":50,"speed":1,"attackPower":3,"attackRate":1,"attackRange":6,"lastAttackTime":0}]
Player类:
using UnityEngine;using System.Collections;/// <summary>/// 玩家的属性类/// </summary>public class PlayerStat{ public string name = ""; public int health; public int maxHealth; public int speed; public int attackPower; public float attackRate; public int attackRange; public int lastAttackTime; //友情提示,这个是JsonFx必须要的 public PlayerStat() { }}
准备工作就已经做好,现在开始要读取Json。。
GM类,新建一个场景,将这个类放到任意物品上。
using UnityEngine;using System.Collections;public class GM : MonoBehaviour{ //放了所有的player的属性 public static PlayerStat[] players; const string addressPlayer = "data/players"; //第一次进入游戏 public static bool isFirst = true; void Awake() { if (isFirst) { isFirst = false; players = ReadFileTool.AddressToClasses<PlayerStat>(addressPlayer); } } void Start() { foreach (PlayerStat p in players) { Debug.Log("名字:" + p.name + " health:" + p.health); } }}
运行与结果:
OK。如此简单,json里面的内容就全部放到了自己的静态类之中。
另外友情提示,JsonFx支持把Class 序列化为 Json。
个人觉得非常方便。
目前已知Bug:比如传一个float值为2的,可能会变成1.99999999.。。虽然知道unity3d的浮点型运算也有错,这里大胆猜测是jsonfx的原因。
LitJson也有浮点型的问题。不过不算硬伤。
转载时请注明出处
- 最好用的 unity3d Json数据传输,插件JsonFx !!
- 最好用的 unity3d Json数据传输,插件JsonFx !!
- 【json】JsonFX
- JsonFX Unity3D 如何使用JsonFX
- json的数据传输显示
- 最好用的 Eclipse 插件
- Unity 使用JsonFx解析本地json数据
- Unity使用JsonFx进行JSON (反)序列
- Unity利用JsonFX解析Json格式文本
- Unity使用JsonFX插件进行序列化
- 数据传输的常用格式JSON
- chrome下最好用的截图插件
- 最好用的 Eclipse 插件收藏
- 最好用的 Eclipse 插件收藏
- 最好用的 Eclipse 插件收藏
- 最好用的 Eclipse 插件收藏
- 最好用的 Eclipse插件收藏
- mybatis最好用的分页插件
- CodeForces Round #191 (327C) - Magic Five 乘法逆元与费马小定理
- ORB算法
- ABAP--如何生成SAP系统ABAP标准课程涉及到的数据表无数据的问题
- jquery validator addMethod 方法的使用
- fg、bg、jobs、&、ctrl + z等linux命令简介
- 最好用的 unity3d Json数据传输,插件JsonFx !!
- 如何 修改RAILS的默认错误提示 和 Rails validation error message 相关的合集
- 【转】Unity3D Platform Dependent Compilation
- jQuery validate表单正则验证功能详解
- ACM - 暑期第一天:求任意表达式的值
- ctrl+c,ctrl+d,ctrl+z在linux中意义
- 代理模式
- 诗歌rails之 关于Rails的错误提示 Rails flash error
- 解决source insight不识别.cc文件的问题