unity使用Google Protobuf

看到網上說Google的這個序列化工具能自動生成腳本(java、c#、c++。。。。。。)感覺很厲害的樣子,於是就學學怎麼在unity裏用,正好結合之前寫的socket通信,做一個demo。我看網上protobuf的教程很亂啊,最開始想找一篇跟着做下來完事了,結果坑也是不少。。。。。。
1.打開vs新建一個c#控制檯工程
2.管理解決方案的nuget包
在這裏插入圖片描述
3.搜索Google protobuf
在這裏插入圖片描述
4.安裝上圖的兩個
5.安裝成功後,右鍵解決方案,在文件資源管理器中打開文件夾(就是找到工程的位置)
6.在工程的package文件夾下可以看到我們安裝好的protobuf
在這裏插入圖片描述
7.來到tools文件夾下的Windowsx64文件夾下(根據自己系統選擇)
在這裏插入圖片描述
8.一開始這個文件夾是隻有protoc.exe(我也不知道幹啥用的),另外兩個是我自己建的,其中,info.proto就是自己新建一個txt然後根據Googleprotobuf的語法寫好要序列化的消息,最後重命名爲.proto文件我是這麼寫的。具體的語法大家自己查吧,我也就懂一點,就不誤人子弟了。

syntax = "proto3";



message Info
{
	int32 id=1;
	InfoType type=2;
	V3 pos=3;
	V3 rot=4;
}

message V3
{
  float	x=1;
  float	y=2;
  float z=3;
}


enum InfoType
    {
        Move = 0;
        LClick = 1;
        RClick = 2;

9.生成c#.bat是一個批處理文件,用於把.proto文件轉換成c#文件,這中間的過程我也不太清楚經歷了什麼。同樣新建一個txt文本,粘接一下下面的代碼,然後把txt後綴改成bat就行了(生成java、c++的批處理文件大家自己找吧,這個我也是網上粘的)。

@echo off
for %%i in (*.proto) do (
    protoc --csharp_out=./ %%i
    rem 從這裏往下都是註釋,可忽略
    echo From %%i To %%~ni.cs Successfully!  
)
pause

10.雙擊執行這個批處理文件,生成c#腳本
在這裏插入圖片描述
11.補充一點,這個文件夾下有工具的一些proto文件,在生成c#腳本時如果提示缺少那個,你就把那個複製一份到你自己新建的proto文件的同級目錄下。
在這裏插入圖片描述
12.將生成的c#腳本拖到unity工程裏,有報錯,先不慌,來到下面這個目錄下,根據你的.net版本選擇合適的Google.Protobuf.dll,也放到unity工程裏。
在這裏插入圖片描述
13.如果你跟我一樣也是選的net45文件夾的dll,你需要把unity的.net版本調高,然後重啓unity。
在這裏插入圖片描述
15.這時候可能還有報錯,打開任意一個unity的c#腳本然後做2 、3步,不過這裏只需要安裝Google.protobuf就夠了。至此,protobuf已經可以使用了。具體用法就和普通類是很類似的。

序列化和反序列化都封裝起來的,我們直接賦值取值就行了
序列化

 public void AddData(Vector3 pos,Vector3 rot)
    {
       Info mInfo = new Info
        {
            Id = hit.transform.GetComponent<NetID>().ID,
            Type = InfoType.Move,
            Pos = new V3 { X = pos.x, Y = pos.y, Z = pos.z },
            Rot = new V3 { X = rot.x, Y = rot.y, Z = rot.z }
        };
        //socket客戶端發送
        mClient.SocketSend(mInfo.ToByteArray());
    }

反序列化

 Info info = new Info();
            info = Info.Parser.ParseFrom(mClient.mReceiveBytes);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章