上次说道,有人在github上分享了可用于Unity的protobuf
GIT: protobuf3-for-unity
以下是楼主在Mac下进行的实践总结。
简明教程
本教程适合不想自己动手编译protobuf.dll的同学。
1. 参考protobuf的git说明文档,安装编译器。
https://github.com/google/protobuf/releases
我用的是
https://github.com/google/protobuf/releases/download/v3.0.0/protoc-3.0.0-osx-x86_64.zip
注:记得将protoc的路径添加到path里。
export PROTOC_PATH=<protobuf的路径>
export PROTOC=$PROTOC_PATH/bin/protoc
export PATH=$PROTOC_PATH/bin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:$PATH
2. 下载protobuf3-for-unity的已经编译好的dll。
我是自己编译的,所以没有进行测试。理论上正常使用应该没有问题。
注意:我直接编译的版本有遇到过一个异常,如果你也遇到了 System.Reflection.Emit 的错误,可以参考后边我修复的版本。
下载地址:
https://github.com/bitcraftCoLtd/protobuf3-for-unity/releases
3. 将proto文件编译为.cs文件
命令示例:
protoc --csharp_out=. ./addressbook.proto
更详细的命令可以看文档,或者输入命令
protoc -help
4. 将protobuf.dll添加到Unity工程的Plugins目录
5. 编译测试
测试代码可以参考AddressBook的示例,或者参看具体文档。
https://github.com/bitcraftCoLtd/protobuf3-for-unity/tree/v3.0.0/src/AddressBook
6. 可能出现的问题
楼主测试的时候发现,将protobuf message转换为string,在iOS上有问题,因为protobuf的c#代码使用了动态生成代码的技术。
错误如下:
System.Reflection.Emit is not supported.
所以,需要避免使用这些方法,或者自己重新编译dll。
参考楼主的修改版本:
https://github.com/zhangzhibin/protobuf3-for-unity-ex
下载地址:
https://github.com/zhangzhibin/protobuf3-for-unity-ex/releases
使用有问题,欢迎留下出错日志。
网友评论