Unity中使用Protobuf

时间:2024-05-18 16:20:17

开发环境

  • Windows
  • C#
  • Unity 2017.1.2
  • Visual Studio 2012 & Visual Studio 2017
  • .NET 3.5 | .NET 4.6
  • protobuf-3.6.1

protobuf

官网地址 使用介绍

官网教程地址 protobuf tutorial
github地址 protocolbuffers
从gitbub中下载发布版本 版本下载

简单介绍

使用protobuf主要有三方面内容

  • 编写proto文件
  • 使用protoc工具生成代码文件
  • 工程中引入protobuf源码或者库文件

使用

准备工作

从上面github下载地址中下载release的C#版压缩包 protobuf-csharp-3.6.1。还有 protoc-3.6.1-win32.zip 这个压缩包里有 protoc.exe 工具,根据不同平台还可以下载 osx,linux版本。
下载完成后解压后目录如下。
Unity中使用Protobuf
目录中的readme有相关内容介绍。重点关注 csharp 和 cmake 目录。
先说 cmake 目录,根据目录中的 reademe 配置好 cmake 环境,最后可以生成一个 vs 的解决方案,使用vs2017打开解决方案后,可以生成proto相关的几个工具,其中就有 protoc.exe。当然如果没有修改proto源码的需求的话,可以不关注cmake目录,直接使用上面下载的 protoc.exe即可。

导入代码

在工程中使用proto的话,有两种方式,一种是引入proto代码,另外一种是引入proto代码生成的dll。针对Unity开发使用的C#版本,还要考虑 .Net 版本问题。Unity现在大部分使用的 .Net 3.5,而C#版protobuf目前官方是不支持 .Net 3.5了。不过想在 .Net 3.5 使用 protobuf 3.x 版本的话也是可以的,生成 dll 部分会讲到。

引入proto代码

可以直接将 charp/src/ 目录下的 Google.Protobuf 目录下的代码拷贝到工程中即可。不过在Unity使用这种方式的话,需要将程序集改成 .Net 4.6。p.s.修改Unity使用程序集版本路径,在Unity Editor 中 Player Settings -> Other Settings 中修改。

引入 dll

如果要引入 dll 的话,需要将上面引入的proto代码生成 dll。这个时候需要 vs2017,使用低版本的vs2012是不可以的。使用vs2017还需要安装 .Net Core,在vs2017安装工具中可以选装。在 csharp/src 下有个解决方案,使用 vs2017 打开即可。
Unity中使用Protobuf
右键选中 Google.Protobuf 执行生成,即可生成 Google.Protobuf.dll 文件。生成的 dll 文件位于 bin/Debug 目录下。默认是生成 .Net 4.5的 dll,放在 net45 目录下。生成 .Net 3.5的 dll 的话可以修改工程配置文件。
生成 .Net 3.5 版 dll
修改Google.Protobuf工程文件。src/Google.Protobuf/Google.Protobuf.csproj。使用文本编辑器打开Google.Protobuf.csproj文件后,找到里面的关键字 TargetFrameworks ,将关键字后面的 net45 改成 net35即可,然后同上面的右键执行生成操作,就可以生成 .Net 3.5版的 dll。
将 dll 文件拷贝到 Unity 工程中的 Plugins 目录下即可。

简单使用

通过上面准备工作后,可以正式开始使用protobuf了。从github下载的包中自带的工程中有一个官方写的 AddressBook 例子。可以使用vs2017打开查看。里面有编写好的一个proto文件。
可以新建一个unity工程,然后使用 AddressBook 中自带的 proto文件,也可以自己编写一个,编写完后,在命令行状态下使用 protoc.exe 生成 c# 代码文件。命令格式

 protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/addressbook.proto

把生成的 Addressbook.cs 代码文件拷贝到 unity 工程中即可使用。

通过上面两种方式,写了两个unity使用protobuf的小demo。
unity中使用proto源码的小demo
unity中使用dll的小demo