对于强联网实时需要在服务器端和客户端传输数据的游戏项目,越高效快速解析、内存消耗越低数据传输,对游戏的流畅度体验影响也是很大的。目前针对移动端主流的数据传输格式有Json/ProctoBuf/FlatBuffer。而本篇介绍的FlatBuffer是Google特别针对游戏项目开发的。关于它们之间的优缺点比较,读者可以参考 http://google.github.io/flatbuffers/md__benchmarks.html
本篇文章主要详细介绍FlatBuffer的协议编写,协议特定语言版本的转化。
首先,从FlatBuffer GitHub官网下载源码和工具flatc.exe。 https://github.com/google/flatbuffers/releases
下载下来压缩文件
解压后
另外的
这里先编写一份schema文件(格式:.fbs)
namespace MyGame.Sample;
enum Color:byte { Red = 0, Green, Blue = 2 }
union Equipment { Weapon } // Optionally add more tables.
struct Vec3 {
x:float;
y:float;
z:float;
}
table Monster {
pos:Vec3; // Struct.
mana:short = 150;
hp:short = 100;
name:string;
friendly:bool = false (deprecated);
inventory:[ubyte]; // Vector of scalars.
color:Color = Blue; // Enum.
weapons:[Weapon]; // Vector of tables.
equipped:Equipment; // Union.
path:[Vec3]; // Vector of structs.
}
table Weapon {
name:string;
damage:short;
}
root_type Monster;
生成对应语言版本脚本文件,cmd运行flat.exe工具 参看命令:https://google.github.io/flatbuffers/flatbuffers_guide_using_schema_compiler.html
但为了可以批量生成协议文件,我们可以编写批量转换工具
如何编写呢?新建txt文件编辑完成后,修改后缀为.bat格式
lua协议文件生成工具
C#协议文件编写工具
以后需要新增的协议,编辑一下对应版本工具即可。
点击对应工具,生成对应语言版本的文件
下篇文章介绍如何在项目中使用该生成的协议文件进行对象序列化和反序列化操作。