谷歌Google-protobuf源码地址。
首先我们看一下官方给出的介绍:
protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。
Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。
你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而不破坏由旧数据结构编译的已部署程序。
从Google-protobuf可以下载到protobuf代码,但后续的使用还需要我们自己去定义。
这个是我自己的测试项目。
用protobuf需要自己定义一个PB类,然后在方法中调用解析与加载的函数,进行数据的封装,可以存入文本中protobuf相比交于XML更小更快,但所显示效果并没有XML直接。
using UnityEngine;
using System.IO;
// 引用ProtoBuf-Net的功能包
using ProtoBuf;
/// <summary>
/// 用于保存Unity中Quaterion类型的PB类
/// </summary>
[ProtoContract]
public class PBN_Quaterion
{
/// <summary>
/// 以下是对应Quaterion的数据分量,重点是ProtoMember从1开始编号,不要重复,
/// 并且使用getter,setter方式。
/// </summary>
/// <value>The x.</value>
[ProtoMember(1)]
public float x { get; set; }
[ProtoMember(2)]
public float y { get; set; }
[ProtoMember(3)]
public float z { get; set; }
[ProtoMember(4)]
public float w { get; set; }
/// <summary>
/// 无参构造函数,这个必须要有!
/// </summary>
public PBN_Quaterion()
{
}
/// <summary>
/// 方便Unity的Quaterion转化到PBN_Quaternion
/// </summary>
/// <param name="q">Q.</param>
public PBN_Quaterion(Quaternion q)
{
this.x = q.x;
this.y = q.y;
this.z = q.z;
this.w = q.w;
}
/// <summary>
/// 方便转化回Unity的Quaternion
/// </summary>
/// <returns>The quat.</returns>
public Quaternion toQuat()
{
return new Quaternion(x, y, z, w);
}
/// <summary>
/// 一切为了方便吧
/// </summary>
/// <returns>The quat.</returns>
/// <param name="q">Q.</param>
public static PBN_Quaterion FromQuat(Quaternion q)
{
return new PBN_Quaterion(q);
}
}
/// <summary>
/// 测试组件
/// </summary>
public class PBNTest : MonoBehaviour
{
/// <summary>
/// 要采样的对象
/// </summary>
public Transform target;
/// <summary>
/// 要采样的对象
/// </summary>
public Transform targes;
/// <summary>
/// 用来存取数据的绝对路径
/// </summary>
public string path;
/// <summary>
/// 存储target当前旋转
/// </summary>
public void saveRot()
{
using (Stream file = File.Create(path))
{
Serializer.Serialize(file, PBN_Quaterion.FromQuat(target.localRotation));
file.Close();
}
}
/// <summary>
/// 读取存储的旋转,并设置回target
/// </summary>
public void loadRot()
{
using (Stream file = File.OpenRead(path))
{
PBN_Quaterion q = Serializer.Deserialize<PBN_Quaterion>(file);
file.Close();
targes.localRotation = q.toQuat();
}
}
}
这个是进行存储之后在txt中显示的数据,protobuf所显示的数据是无法通过txt直接看到的,需要通过代码的解析才能显示。
臛 ???钌?砍?