Unity3D学习笔记(二十五)引用第三方DLL,解析JSON
2016-02-24 10:33
597 查看
在日常的网络应用/游戏开发中,我们经常需要在服务端和客户端之间做数据交互。比如以前很火的社交游戏《开心农场》,当你进入好友家查看对方的菜有没有成熟的时候,客户端就开始向服务端请求该好友家的信息。服务端收到请求后就会将该玩家的农场资料发回给客户端,并由客户端解析后显示在游戏界面上。而中间的“语言”我们称之为数据交互格式。
目前页游中比较流行的有XML/JSON/AMF等等,当然也可以自己实现一套序列化/反序列化的解决方案。但使用这些久经考验并且现成的格式,可以省下很多重复造轮子的精力和时间。JSON.Net是我用得比较顺手的JSON序列化/反序列库,它是开源的。
点击这里可以进入它的官方页面并下载。在写这篇笔记的时候最新版本为4.5R10,支持
.Net2.0/3.5/4.0,还有Silverlight/WP/Win8。
下载成功后可以得到一个zip压缩包,里边包含了源代码(Source目录)和编译好的DLL(Bin目录),运行环境都已经按目录名分好了。这里有一点要注意,虽然Unity中使用.Net Framework 3.5作为工程的类库输出,但是不能使用Net35下面的DLL,而应该使用Net20下面的DLL。
所有由Unity引用的外部DLL,都必须放置在工程Assets/Plugins文件夹中(在Unity的工程面板中为Plugins目录),支持存放到子级文件夹。如左图所示,我在Plugins下面新建了一个Newtonsoft.Json的目录,并把DLL文件都扔进去。这样可以使得工程面板的目录结构更清晰一点,但并不是强制性的。
然后新建一个Test.cs脚本做测试,看看引用是否成功。别忘了脚本必须附加到场景上的某个物体上才会被调用。
▇ Test.cs
using UnityEngine;
using Newtonsoft.Json;
public class TestData
{
public string PlayerName { get; set; }
public int Level { get; set; }
public int Exp { get; set; }
public override string ToString()
{
return string.Format("PlayerName={0},Level={1},Exp={2}", PlayerName, Level, Exp);
}
}
public class Test : MonoBehaviour
{
void Start()
{
var data = new TestData
{
PlayerName = "黄旭杨",
Level = 10,
Exp = 123,
};
var serializedData = JsonConvert.SerializeObject(data);
Debug.Log("Serialized:" + serializedData);
var deserializedData = JsonConvert.DeserializeObject(serializedData);
Debug.Log("Deserialized:" + deserializedData);
}
}
复制代码
▇ 实现效果
运行游戏后就会在控制台里打印出以上结果,可见Unity已经顺利地调用Json.Net序列化和反序列化对象了。
PS:写完这篇文章的时候试了下Newtonsoft.Json.Linq命名空间下面的JToken.Parse(),发现无法通过编译。原因是Unity默认是将API等级设置为.Net2.0 Subset,导致找不到需要的类。解决方法很简单,只要在主菜单中的File→Build Setting→Player
Settings…→Other Setting→Api Compatibility Level设置为.Net 2.0即可。
目前页游中比较流行的有XML/JSON/AMF等等,当然也可以自己实现一套序列化/反序列化的解决方案。但使用这些久经考验并且现成的格式,可以省下很多重复造轮子的精力和时间。JSON.Net是我用得比较顺手的JSON序列化/反序列库,它是开源的。
点击这里可以进入它的官方页面并下载。在写这篇笔记的时候最新版本为4.5R10,支持
.Net2.0/3.5/4.0,还有Silverlight/WP/Win8。
下载成功后可以得到一个zip压缩包,里边包含了源代码(Source目录)和编译好的DLL(Bin目录),运行环境都已经按目录名分好了。这里有一点要注意,虽然Unity中使用.Net Framework 3.5作为工程的类库输出,但是不能使用Net35下面的DLL,而应该使用Net20下面的DLL。
所有由Unity引用的外部DLL,都必须放置在工程Assets/Plugins文件夹中(在Unity的工程面板中为Plugins目录),支持存放到子级文件夹。如左图所示,我在Plugins下面新建了一个Newtonsoft.Json的目录,并把DLL文件都扔进去。这样可以使得工程面板的目录结构更清晰一点,但并不是强制性的。
然后新建一个Test.cs脚本做测试,看看引用是否成功。别忘了脚本必须附加到场景上的某个物体上才会被调用。
▇ Test.cs
using UnityEngine;
using Newtonsoft.Json;
public class TestData
{
public string PlayerName { get; set; }
public int Level { get; set; }
public int Exp { get; set; }
public override string ToString()
{
return string.Format("PlayerName={0},Level={1},Exp={2}", PlayerName, Level, Exp);
}
}
public class Test : MonoBehaviour
{
void Start()
{
var data = new TestData
{
PlayerName = "黄旭杨",
Level = 10,
Exp = 123,
};
var serializedData = JsonConvert.SerializeObject(data);
Debug.Log("Serialized:" + serializedData);
var deserializedData = JsonConvert.DeserializeObject(serializedData);
Debug.Log("Deserialized:" + deserializedData);
}
}
复制代码
▇ 实现效果
运行游戏后就会在控制台里打印出以上结果,可见Unity已经顺利地调用Json.Net序列化和反序列化对象了。
PS:写完这篇文章的时候试了下Newtonsoft.Json.Linq命名空间下面的JToken.Parse(),发现无法通过编译。原因是Unity默认是将API等级设置为.Net2.0 Subset,导致找不到需要的类。解决方法很简单,只要在主菜单中的File→Build Setting→Player
Settings…→Other Setting→Api Compatibility Level设置为.Net 2.0即可。
相关文章推荐
- VS2012/2013 插件 For Unity3D Shaderlab
- Unity3D学习笔记(二十四)敌人AI,第2版
- 如何为Android在Unity 3D设置AdMob
- SubShader 中的标签-Culling & Depth Testing
- Unity3D学习笔记(二十三)导入WOW角色
- [教程] 究极 Unity 地形制作 - 极速创建华丽的游戏地形
- Unity3D学习笔记(二十二)模仿WOW镜头操作
- Unity3D学习笔记(二十一)导入WOW动画不完美修复方案
- 通过谷歌播放服务集成AdMob和Unity 3D
- Unity学习之路(一)太空大战类游戏制作5
- Unity3d网格合并
- Learn Unity - Scripts(中级教程)
- Learn Unity - Scripts(新手教程)
- Unity中Android和Ios平台的crash reporter(崩溃报告采集与上传)
- 猫都能学会的Unity3D Shader入门指南(二)
- 猫都能学会的Unity3D Shader入门指南(一)
- Unity教程之-制作闪亮的星星Star(四):Unity Editor编辑器实现Undo
- Unity教程之-制作闪亮的星星Star(五):源码
- Unity教程之-制作闪亮的星星Star(三):给Star创建Unity Editor编辑器
- Unity教程之-制作闪亮的星星Star(二):创建Shader