Unity中使用ProtocolBuffer
Unity中使用ProtocolBuffer
Unity中使用ProtocolBuffer
1、什么是ProtocolBuffer
Google提供一个具有高效可序列化的数据交互格式。
2、ProtocolBuffer优势
- 性能好/效率高
- 自动代码生成:通过模板自动生成对应语言模型类
- 支持向后兼容和向前兼容:当客户端和服务器同事使用一块协议的时候, 当客户端在协议中增加一个字节,并不会影响客户端的使用
- 与平台和语言无关(多语言支持)
- 扩展性好(开源)
Tips:兼容性注意点:
- 不要修改已存字段的标签号
- 新添加的字段必须使用optional和repeated限定符
- 不能移除已存在的required字段,虽然可以移除旧的optional和repeated类型字段,但是原有的标签号必须保留,避免被新字段重用
- int32、uinit32、int64和bool等互相兼容,sint32和sint64兼容,string和byte兼容,fixed32和fixed64,sfixed64兼容,若要修改旧字段类型徐保证兼容性
3、使用
3.1 .Proto文件
这是protobuf提供的一种特殊的脚本,具有格式简单、可读性强和方便拓展的特点,所以接下来我们就是使用proto脚本来定义一个UserInfo类型。
- syntax ="proto3";
- package ProtoMsg;
- message UserInfo{
- int32 ID=1;//用户ID,服务器自动生成,用户注册成功后返回给客户端
- string Account=2;//帐号
- string Password=3;//密码
- }
语法:
- required:必有的属性
- optional:可选属性
- repeated:数组
3.2 Protobuf---->C#
我们需要在Unity等C#环境使用PB就需要把如上我们定义的类型转为cs文件,自动生成工具如下:
Protobuf2CS
[
通过如下.bat文件可统一将该目录下ProtoFile下我们定义的如上UserInfo.proto文件转为.cs代码
@echo off
set "PROTOC_EXE=%cd%\tool\protoc.exe"
set "WORK_DIR=%cd%\ProtoFile"
set "CS_OUT_PATH=%cd%\cs"
::if not exist %CS_OUT_PATH% md %CS_OUT_PATH%
for /f "delims=" %%i in ('dir /b protoFile "ProtoFile/*.proto"') do (
echo gen protoFile/%%i...
%PROTOC_EXE% --proto_path="%WORK_DIR%" --csharp_out="%CS_OUT_PATH%" "%WORK_DIR%\%%i"
)
echo finish...
pause
生成后的CS文件可直接作为模型类使用
4、使用
首先、我们需要把Google.protobuf.dll引入到工程项目中去。之后就可以用其提供的序列化和反序列化方法来直接使用。需要注意的是所有的模型类都实现了IMessage接口,因此我们可以在结发的入口中直接通过IMessage类型来处理数据,在通过协议把他转换为相应定义的数据类型.
- byte[] userBytes= ProtobufHelper.ToBytes(user);
- UserInfo userFromBytes = ProtobufHelper.FromBytes<UserInfo>(userBytes);
点赞鼓励下,(づ ̄3 ̄)づ╭❤~
作者:世纪末的魔术师
出处:https://www.cnblogs.com/Firepad-magic/
Unity最受欢迎插件推荐:点击查看
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。