Unity中使用Protobuf
来源:互联网 发布:淘宝店铺装修计划 编辑:程序博客网 时间:2024/06/06 12:20
将.proto文件转换成.cs文件,教程:http://blog.csdn.net/czhenya/article/details/78216281
然后将转换后的.cs文件放到Unity中,然后将protobuf-net.dll 文件 (链接:http://pan.baidu.com/s/1nveIOit 密码:w4fz )文件放入相同的文件夹中,,,
然后编写如下代码:
using Desktop.ProtoGen.Test; //注意引用Person类的命名空间 和下面Person类的对应using System.Collections.Generic;using System.IO;using UnityEngine;public class ProtobufDemo : MonoBehaviour { private string path; // Use this for initialization void Start () { //存储序列化文件名 path = Application.dataPath + "TestDemo"; } void OnGUI() { if (GUILayout.Button("Protobuf序列化")) { Person person1 = new Person() { Name = "Czhenya", Age = 12 }; Person person2 = new Person() { Name = "CZY", Age = 31 }; List<Person> PerList = new List<Person>() { person1, person2 }; string strRel = ProtobufHelp.Serialize<List<Person>>(PerList); ProtobufHelp.Serialize<List<Person>>(path, PerList); Debug.Log("序列化成功了,生成文件名为TestDemo"); } if (GUILayout.Button("Protobuf反序列化")) { Debug.Log("反序列化,获取出序列化文件中的信息"); FileInfo info = new FileInfo(path); Stream sf = info.OpenRead(); List<Person> NewPerList = ProtobufHelp.DeSerialize<List<Person>>(sf); for (int i = 0; i < NewPerList.Count; i++) { Debug.Log(NewPerList[i].ToString()); } } }}
使用软件转换成.cs的文件
namespace Desktop.ProtoGen.Test //上面引用的命名空间{ [global::System.Serializable, global::ProtoBuf.ProtoContract(Name=@"Person")] public partial class Person : global::ProtoBuf.IExtensible { public Person() {} public override string ToString() { return Name + "-" + Age; } private string _Name; [global::ProtoBuf.ProtoMember(1, IsRequired = true, Name=@"Name", DataFormat = global::ProtoBuf.DataFormat.Default)] public string Name { get { return _Name; } set { _Name = value; } } private int _Age = default(int); [global::ProtoBuf.ProtoMember(2, IsRequired = false, Name=@"Age", DataFormat = global::ProtoBuf.DataFormat.TwosComplement)] [global::System.ComponentModel.DefaultValue(default(int))] public int Age { get { return _Age; } set { _Age = value; } } [global::ProtoBuf.ProtoContract(Name=@"TypeEnum")] public enum TypeEnum { [global::ProtoBuf.ProtoEnum(Name=@"Web", Value=1)] Web = 1, [global::ProtoBuf.ProtoEnum(Name=@"Ios", Value=2)] Ios = 2, [global::ProtoBuf.ProtoEnum(Name=@"News", Value=3)] News = 3 } private global::ProtoBuf.IExtension extensionObject; global::ProtoBuf.IExtension global::ProtoBuf.IExtensible.GetExtensionObject(bool createIfMissing) { return global::ProtoBuf.Extensible.GetExtensionObject(ref extensionObject, createIfMissing); } }}
Protobuf帮助文档:(核心)
using ProtoBuf;using System.IO;using System.Text;using UnityEngine;public class ProtobufHelp : MonoBehaviour { /// <summary> /// 序列化成string /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t"></param> /// <returns>返回字符串</returns> public static string Serialize<T>(T t) { using (MemoryStream ms = new MemoryStream()) { Serializer.Serialize<T>(ms, t); return Encoding.UTF8.GetString(ms.ToArray()); } } /// <summary> /// 序列化到文件 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="path"></param> /// <param name="data"></param> public static void Serialize<T>(string path, T data) { using (Stream file = File.Create(path)) { Serializer.Serialize<T>(file, data); file.Close(); } } /// <summary> /// 根据字符串反序列化成对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="content"></param> /// <returns></returns> public static T DeSerialize<T>(string content) { using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content))) { T t = Serializer.Deserialize<T>(ms); return t; } } /// <summary> /// 根据文件流返回对象 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="filestream"></param> /// <returns></returns> public static T DeSerialize<T>(Stream filestream) { return Serializer.Deserialize<T>(filestream); }}
第一个脚本挂载到有物体上运行依次点击OnGUI按钮:
运行生成的文件:
阅读全文
1 0
- Unity中使用Protobuf
- Unity中使用Protobuf-net
- Unity中为什么使用protobuf以及使用方法
- unity中使用protobuf(兼容ios平台)
- unity中使用protobuf(兼容ios平台)
- Unity 使用 Protobuf-net
- Unity使用protobuf
- unity 简单使用protobuf
- [Unity 网络]Unity Protobuf使用
- 【protobuf】 2.在Unity中引用ProtoBuf
- 如何在unity中使用protobuf工具生成cs类
- Unity中protobuf的使用方法
- Unity中protobuf的使用方法
- Unity中protobuf的使用方法
- unity中简单实用protobuf(Protobuf-net)
- java中使用protobuf
- Unity3D中使用protobuf
- scala中使用protobuf
- MySQL学习笔记(5)--基本的SQL语句
- 10.12(周四)
- 文章标题
- mysql-union,join,index
- PKU Helper 2017 开发组招新题目解答
- Unity中使用Protobuf
- Django中 form表单的使用
- Java Web技术路线总结
- 51 nod 1079
- 自定义View高仿小米天气24小时天气预报折线图
- 字符设备驱动
- tensorflow知识点积累--1
- java爬取百度百科词条
- OSGi入门必读系列《OSGi和Spring入门:什么是Spring动态模型(Spring DM)》