Unity3D-SLua+ProtocolBuffers构建说明

来源:互联网 发布:传奇世界战士技能数据 编辑:程序博客网 时间:2024/06/16 03:41

Unity3D-SLua+ProtocolBuffers构建说明.因为项目使用lua与protocal buffer结构的架构。所以近来对lua与protocal buffer 进行了些深入的了解。对构建slua + protocal buffer的体会进行一些记录,以供大家参考。如何编译android v7a和x86平台以及ios arm64平台的lua库请看这里《luajit-slua-protoc编译动态库》。

1.lua51+slua+protobuf打动态库

protocolbuf 地址 https://github.com/sean-lin/protoc-gen-lua

在mac下打bundle库用lua51简单点,直接把lua51的代码和slua.c+pb.c文件塞进xcode。unity4.6.x需要设置architecture为Universal,unity5设置为standard architecture(64bit),否则u3d加载动态库失败。

2.protobuf转换工具环境

我使用python来使用protocal buff 所以,需要安装python的google.protobuf。

具体安装步骤看这里:http://www.tuicool.com/articles/VfQfM3

还需要安装protoc-gen-lua部分的程序可以参考这里:http://blog.csdn.net/sunshine7858/article/details/9260671

3.protobuf序列化后的与c#通信

lua向c#传递protobuf协议字符串。由于c#字符串编码使用unicode,与lua的protoc-gen-lua序列化后的字符串编码格式不一样,我大概知道是因为protoc中c部分写入字符串时是直接使用char形式写入,没有进行任何编码导致的。所以当protoc-lua序列化后的字符串传入时slua里的Mashal.PtrToStringAnsi会报空,换成auto也无济于事。

同样的问题也出现在了c#向lua传递协议字符串上。

这需要对slua进行修改。修改的目的还是将字符串传入c#或者lua,但我们要换一种方式传,原先使用lua_pushstring传字符串,改用lua_pushlstring以byte[]形式传入。如何修改才更完美呢。使用自定义类比如protobuff类,在slua里增加protobuff的重载方法,pushValue,checkType,typePushMap都需要增加,typePushMap主要是为了委托传参部分。这样当c#使用protobuff向lua传参时,以及lua使用调用带有protobuff类型c#方法时就能自动识别protobuff并得到正确的结果。

 

转载请注明出处:http://www.luzexi.com


QA protoc-gen-lua: program not found or is not executable 错误  

要在 /usr/local/bin 下面做一个ln -s 目录/protoc-gen-lua  protoc-gen-lua 的软链接



0 0
原创粉丝点击