Unity环境下使用GoogleProtoBuf
来源:互联网 发布:java 7 8 新特性 编辑:程序博客网 时间:2024/05/25 18:09
Google ProtoBuf 是谷歌提供的一套序列化库,可用于网络通信中数据的序列化。由于Unity大部分的编码环境使用的是C#,所以今天介绍一个.net版本的 ProtoBuf 。
该库下载地址:http://code.google.com/p/protobuf-net/downloads/list
其根目录文件如下:
其Full文件夹下视图:
每个平台或体系结构都有一个对应的库,调试文件,提供与IDE可视化Dll信息的一个xml文件( 主要摘些Dll中的体系结构,包括结构中的函数变量申明和使用说明等 ),在这里我选择的当然是Unity,当然这里我们使用的主要是Dll,其他文件就无需理会了。
打开MonoIDE左边工程视图中,默认是这个样子。
然后在Unity Project视口,Assets根目录下,创建层级文件夹,Plugins->ProtoBuf,然后将ProtoBuf-net.dll拖进ProtoBuf文件夹下。Plugins直译是插件的意思,ProtoBuf当然就是程序集命名空间的名字了。
此时再切换到MonoIDE,你会发现它已经更新引用程序集了。
我们双击Protobuf-net.dll可以像Vs2012中一样查看程序集内包含的所有东西。
新建TestGoogleProtoBuf.cs,键入以下源码。
using UnityEngine;
using System.Collections;
using System.IO;
using ProtoBuf;
using ProtoBuf.Meta;
[ProtoContract]
public class msg_test_data
{
[ProtoMember(1)]
public int vI { get; set; }
public bool vISpecified { get; set; }
[ProtoMember(2)]
public float vF { get; set; }
public bool vFSpecified { get; set; }
[ProtoMember(3)]
public string[] vStr { get; set; }
}
public class TestGoogleProtoBuf : MonoBehaviour {
// Use this for initialization
void Start ()
{
msg_test_data serializeData = new msg_test_data();
serializeData.vI = -1;
serializeData.vF = -1000000f;
serializeData.vFSpecified = true;
serializeData.vISpecified = false;
serializeData.vStr = new string[2]
{
"我叫杨太彦",
"我正在学习序列化"
};
MemoryStream stream = new MemoryStream();
Debug.Log(string.Format("Stream size of before the write:{0}", stream.Length));
Debug.Log(string.Format("Before the serialize Int:{0} , Float:{1}",
serializeData.vI, serializeData.vF));
System.Action<string[]> action = (p) =>
{
if (p != null)
{
Debug.Log(string.Format("Array Length:{0}", p.Length));
foreach (string one in p)
{
Debug.Log(string.Format("printf:Str{0}",one));
}
}
};
action(serializeData.vStr);
ProtoBuf.Serializer.Serialize<msg_test_data>(stream, serializeData);
Debug.Log(string.Format("Stream size of after the wirte:{0}",stream.Length));
MemoryStream stream2 = new MemoryStream(stream.ToArray(), 0, (int)stream.Length, false);
msg_test_data result = ProtoBuf.Serializer.Deserialize<msg_test_data>(stream2);
Debug.Log(string.Format("After the serialize Int:{0} , Float:{1}",
result.vI, result.vF));
action(result.vStr);
stream.Close();
}
}
检查错误无误后将脚本挂在摄像机上,运行游戏,这里int的写入权为false,不占用任何字节,输出结果同样为0,字符串占用43字节,Float占用了5字节,完全正确。
TheEnd..
0 0
- Unity环境下使用GoogleProtoBuf
- Unity下SpriteSheet 使用
- Unity Android 在Windows环境下使用grep指令过滤log
- Unity环境下的质数求解探究
- Unity下Profiler的使用
- Unity WebGL环境搭建、开发、使用
- 使用Unity开发Tango的环境配置
- Unity下使用DLL热更新
- unity 各个平台下运行使用
- Unity 3D环境下的Android配置
- unity下lua.txt 在notepad++中开发环境配置
- Unity在安卓环境下通过adb打印语句
- 在unity环境下用ngui实现转盘
- Unity 安卓环境下保持设备屏幕唤醒
- 在unity环境下封装的mysql库
- LINUX环境下使用CVS
- Android 环境下使用GDB
- CVS使用(windows环境下)
- ADSL拨号错误代码表及处理方式
- 看看这个 x,y 哪错了
- oracle 047第2题 正则表达式 REGEXP_LIKE 用法
- mysql 主从复制 以及 读写分离
- 从一个数组建立一个ConsoleOptionParser
- Unity环境下使用GoogleProtoBuf
- django 保存中文到mysql 报错django.db.utils.DatabaseError: Incorrect string value: '\xE5\xBE\x88\xE7\x81\xB5
- 婚车五一遇堵 新郎拉赤脚新娘狂奔下高速
- Getting help from shells
- 没理解double check lock的问题
- 山东理工大学[1595]选夫婿2
- 屏幕抓图——C#实现抓屏功能“gdi32.dll”
- 黑盒测试方法---理论
- 自动1122徐达武第九周作业