- Protobuf格式协议和xml一样具有平台独立性,可以在不同平台间通信,通信所需资源很少,并可以扩展,可以旧的协议上添加新数据。
- Protobuf是在java和c++运行的,Protobuf-net当然就是Protobuf在.net环境下的移植。
源码下载网站 https://github.com/mgravell/protobuf-net
Protobuf-net.dll下载后导入到Unity中直接使用,可以作为数据本地存储和网络通讯,类似xml,json等。
直接上代码示例
using ProtoBuf;
[ProtoContract]
public class User {
[ProtoMember(1)]
public int ID { get; set; }
[ProtoMember(2)]
public string UserName { get; set; }
[ProtoMember(3)]
public string Password { get; set; }
[ProtoMember(4)]
public int Level { get; set; }
[ProtoMember(5)]
public UserType _UserType { get; set; }
public enum UserType {
Master,
Warrior
}
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using ProtoBuf;
public class ProtobufTest : MonoBehaviour {
// Use this for initialization
void Start () {
// Serialization();
NotSerialization();
}
/// <summary>
/// 序列化User里面的信息内容
/// </summary>
void Serialization() {
User user = new User();
user.ID = 21;
user.UserName = "爱尚游Bin";
user.Password = "123456";
user.Level = 4;
user._UserType = User.UserType.Warrior;
using (var fs = File.Create(Application.streamingAssetsPath + "/user.bin"))
{
Serializer.Serialize<User>(fs, user);//把user对象序列化出二进制文件放入fs文件里面
}
}
/// <summary>
/// 反序列化User里面的信息内容
/// </summary>
void NotSerialization() {
User user = null;
using (var fs=File.OpenRead(Application.streamingAssetsPath+"/user.bin")) {
user = Serializer.Deserialize<User>(fs);//反序列化
}
Debug.Log(string.Format("ID:{0},用户名:{1},密码:{2},等级:{3},角色类型:{4}",user.ID,user.UserName,user.Password,user.Level,user._UserType));
}
}
示例工程下载:ProtobufProject