unity pun 同步动画 unity帧同步插件_帧同步


0.前言

protobuf与帧同步没有必然联系,也不是说使用帧同步技术就一定要用protobuf,状态同步也可以使用。但是protobuf的特性和优点非常适合用在帧同步技术上,所以在这里简单介绍一下protobuf。

1.什么是protobuf

定义:可序列化的数据交换格式

用途:用通信协议传输数据,存储数据,是谷歌公司出的

详细的介绍可以阅读这篇文章


Kevin Yan:Protobuf语言指南zhuanlan.zhihu.com


2.为什么使用protobuf

其实阅读了上面的文章,可以大概知道protobuf的一些优势了

关于其特性我做了如下总结

  • 与平台和语言无关(多语言支持)
  • 高效(代码由编译器提前生成)
  • 扩展性好(开源)
  • 性能好(重点)

对比同类技术(json/xml)protobuf有一个缺点,数据的可读性比较差,因为同步的内容是二进制数据流。但是又由于帧同步的特性,只同步操作信息,所以我们又不需要阅读这些数据。

其实这里推荐使用protobuf的核心原因是高效。这里的高效分以下几个方面:

开发效率高,定义好消息体后,使用编译器自动生成双端代码。

传输效率高,使用特殊技术处理后,同步的数据字节更小。

其中帧同步技术是非常希望降低游戏延迟,提升游戏体验。protobuf较高的同步效率非常匹配帧同步的需求。

3.如何使用

可以参考以下文章


ProcessCA:游戏开发好帮手——Protobufzhuanlan.zhihu.com

unity pun 同步动画 unity帧同步插件_字段_02


4.总结

如果阅读了上面两篇文章 ,应该可以看出protobuf的核心技术是标记值。


message Student {
  string name = 1;
  int32 age = 2;
  string sex = 3;
}


这里面的1、2、3都是标记值,不是赋值操作。

通过标记值可以确定字段的名字和类型,因为每个标志值的存在是唯一的,不可重复。

然后序列化成类似字典 key-value的形式进行传输,并且标记值只占1-2个字节。

在message编码成二进制消息体时字段编号1-15将会占用1个字节,16-2047将占用两个字节。所以在一些频繁使用的message中,应该总是先使用前面1-15字段编号。

整篇文章对于protobuf在帧同步中的应用没有做非常详细的介绍,之后有时间会逐渐丰富这块的内容,包括从零开始如何生成双端消息体到真正实现数据同步,暂时可以先参考一下上述两篇文章。