Unity中使用ProtocolBuffer
Unity中使用ProtocolBuffer
1、什麼是ProtocolBuffer
Google提供一個具有高效可序列化的數據交互格式。
2、ProtocolBuffer優勢
- 性能好/效率高
- 自動代碼生成:通過模板自動生成對應語言模型類
- 支持向後兼容和向前兼容:當客戶端和服務器同事使用一塊協議的時候, 當客戶端在協議中增加一個字節,並不會影響客戶端的使用
- 與平臺和語言無關(多語言支持)
- 擴展性好(開源)
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);