上一篇文章讲了: 使用protogen工具将proto文件生成cs文件
本篇接着上一篇,讲一下protobuf具体在unity中如何用
新建一个Unity工程
通过上面的两步,在unity中使用protobuf做开发的环境已经搭建完成,下面就可以来测试一番,是不是很简单,本来事确实很简单
为了开发的方便,这里写了一个protobuf的工具类(ProtobufHelper.cs)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProtoBuf;
using System.IO;
namespace ProtobufObj
{
class ProtobufHelper
{
//将对象序列化为字符串
public static string SerializerToString<T>(T t)
{
using (MemoryStream ms = new MemoryStream())
{
Serializer.Serialize(ms, t);
return ASCIIEncoding.UTF8.GetString(ms.ToArray());
}
}
//将对象序列化到文件
public static void SerializerToFile<T>(T t, string filePath)
{
using (var file = File.Create(filePath))
{
Serializer.Serialize(file, t);
}
}
//将字符串转化为对象
public static T DederializerFromString<T>(string str)
{
//using作为语句,用于定义一个范围,在此范围的末尾将释放对象
//将字符串转化为内存流
using (MemoryStream ms = new MemoryStream(ASCIIEncoding.UTF8.GetBytes(str)))
{
T obj = Serializer.Deserialize<T>(ms);
return obj;
}
}
//将文件数据转化为对象
public static T DederializerFromFile<T>(string filePath)
{
using (var file = File.OpenRead(filePath))
{
T obj = Serializer.Deserialize<T>(file);
return obj;
}
}
}
}
工具类已经写好了,下面就来真正测试一番,写一个test.cs,并将此脚本,挂到unity场景中物体上
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MY;
using ProtoBuf;
using ProtobufObj;
public class test : MonoBehaviour {
// Use this for initialization
void Start () {
daiping kk = new daiping ();
kk.age = 35;
//序列化
string str = ProtobufHelper.SerializerToString<daiping>(kk);
//反序列化
daiping obj = ProtobufHelper.DederializerFromString<daiping>(str);
print(obj.age);
}
}
运行unity打印结果如下:
FR:海涛高软(hunk Xu) QQ技术交流群:386476712