天天看點

Unity中使用Protobuf3.0

 今天準備在unity中使用protobuf, 但是遇到了一些問題,記錄一下。

首先,我們到google protobuf github 上下載下傳工程,主要有兩個東西:

1.Protocol Compiler Installation

下載下傳位址:https://repo1.maven.org/maven2/com/google/protobuf/protoc/

作用:這個是将我們.proto檔案生成c#檔案的exe

我下載下傳了這個:

Unity中使用Protobuf3.0

我放到了目錄:D:\Library\Protobuf\protoc-3.6.1-win32\ 下,然後将這個目錄加入到電腦的環境變量的Path中。

Proto目錄結構:

Unity中使用Protobuf3.0

上面的那個.bat内容如下,用于将Proto目錄下的proto檔案生成c#檔案:

@echo off
cd Proto
set client_dest_path="..\..\..\Assets\Network\Protobuf"
set server_dest_path="..\..\TestServer"
for %%i in (*.*) do protoc --csharp_out=%client_dest_path% %%i
for %%i in (*.*) do protoc --csharp_out=%server_dest_path% %%i
echo success
pause
           

2.Protobuf Runtime Installation

(這個是運作時庫,因為我們要進行序列化和反序列化要用到的)

下載下傳位址:https://github.com/protocolbuffers/protobuf 

下載下傳後,我們找到目錄protobuf-3.6.1\csharp\src下的Google.Protobuf.sln工程用vs2017打開,然後可以看到如圖的工程:

Unity中使用Protobuf3.0

我們編譯紅框選中的工程就可以了,然後就會在目錄:protobuf-3.6.1\csharp\src\Google.Protobuf\bin\Debug\net45

中生成Google.Protobuf.dll這個運作時dll,這個就是運作時庫。

3.導入到unity

(1)将proto檔案對應生成的c#檔案放入到unity工程中

(2)将上面的Google.Protobuf.dll放入到unity工程中

恭喜你,你以為成功了嗎?哈哈哈,并沒有,錯誤來了,如圖:

第一個錯誤:

Unity中使用Protobuf3.0

意思就是unity不支援net4.5的庫,隻支援net3.5的庫,于是在網上搜尋一圈,發現了這個:

https://github.com/bitcraftCoLtd/protobuf3-for-unity 

這個就是unity對應的net3.5的protobuf版本,于是下載下傳下來呗,我打開工程後發現所有子工程都加載失敗了(如果你能正常加載工程那麼可以不管這個),原來是我沒有下載下傳.net core對應的庫,位址是:https://www.microsoft.com/net/download

然後就能正常編譯工程了,編譯後将對應的net3.5版本的Google.Protobuf.dll放到unity中即可。

第二個錯誤:

Unity中使用Protobuf3.0

意思就是我們的net3.5版本的運作時庫中沒有這個UnknownFieldSet, 這時想起我們使用的是3.6.1的proto編譯器生成proto對應的c#檔案,版本太高了,于是我降到了3.4.0的proto編譯器,重新生成proto對應的c#檔案,此時這個錯誤也就消失了。

so,踩坑完畢~~