Skip to content
robinxb edited this page Apr 10, 2018 · 6 revisions
  1. “我用luajit编译的dll可以使用,但是我用lua5.3编译的dll会导致unity闪退,怎么办”

增加LUA_5_3的宏 (见 Unity 文档),删除Library目录,重新打开unity,就可以了,是因为之前的缓存代码是针对luajit的

  1. "Some function push more value to lua stack" / "Some function not remove temp value from lua stack. You should fix it."输出表示什么含义?

如果你修改了代码,说明你修改的代码push了数据到lua堆栈上,但没有把他们pop出来,导致堆栈上残留了这些数据,slua则给出一个warning,需要你找到对应的代码,修复它。如果你确定没有修改代码,请报告,这可能是一个bug。

3)为什么我看不到slua菜单?

如果存在任何编译器错误, 都可能导致slua菜单丢失, 这是unity editor自身的限制, 所以你需要解决编译错误.

4)为什么我把slua放在assets目录后一堆编译错误?

默认slua是针对unity4.6.1生成的wrap文件, 如果你使用其他版本, 可以有部分接口定义不同导致无法编译, 你可以删除luaobject目录后, 等待编译完成,出现slua菜单,重新make, make ui, make custom.

5)为什么lua文件用txt后缀而不是lua?

考虑到发布到UnityStore的需要,以及Resource目录的加载策略,使用txt是最方便的, 如果你自己重写loader,可以使用lua后缀.

6)Lua文件是否可以使用二进制字节码形式?

可以, 针对使用的lua版本(lua/5.1/jit), 需要找到对应的luac程序生成字节码.

7)如何 require 动态更新的lua文件?

如果你的lua文件是通过动态下载asset bundle获得或者直接http下载获得(即lua代码热更新),需要自己实现loader, 你可以添加LuaState.loaderDelegate代理完成自己的加载请求, 具体可以参考LusState.cs代码.

8)如何导出this[]?

this[] get/set会产生getItem/setItem成员函数,请使用他们.

9)iOS 链接报告错误 Unable to insert branch island. No insertion point available. 怎么办?

iOS对dll的尺寸有大小限制, 出现这个错误可能是你的工程代码+第三方库代码+LuaWrap所产生的dll超过限制, 你可以把一些代码抽取出来作为一个独立的dll, 保证工程的dll尺寸在限制内. 新版的Slua可以把Script目录和LuaObject/Unity目录整体制作为一个dll,放入你的Assets目录, 让你的工程依赖这个dll,而不再包含slua(和动态产生的wrap代码),从而减少最终工程dll的尺寸.

  1. 有没有更完整的demo?

请参考 https://github.com/lulersoft/me_SLua

  1. slua支持protobuf/json/sqlite吗?

slua仅专注解决lua和c#绑定的问题, 保证这部分功能足够内敛精简, 任何第三方lua库都可以用, 但这需要你自己编译进入slua库里, 不要问我如何编译他们, 当你打算使用这些库时, 一般情况你应该懂得如何编译他们了.

  1. slua能不能读取luajit编译过的lua文件呢?

可以,但需要针对性的编译对应平台的bytecode,不同平台不兼容.

slua 不同平台采用的luajit版本也不相同,主要在不同平台间选择最适合的版本(建议在目标平台上编译,比如发布iOS版,就需要iOS的luajit来编译),列表如下:

win/android 平台 luajit 2.0.4 32bit

iOS luajit 2.1 universal

mac lua 5.1.5 (不采用jit的原因是,luajit 64bit嵌入的兼容性问题导致不支持unity5)

  1. 能不能知道那些调用是走了反射方法?

从slua1.0后,增加了一个宏SLUA_CHECK_REFLECTION,添加这个宏到工程中,当发生反射调用时,会当作警告输出。

14)如何支持iOS9的bitcode?

如果要支持iOS 9的bitcode,需要使用lua 而不是luajit,因为luajit有部分代码是直接生成native代码,不是LLVM的IR的中间代码(bitcode)导致不能link到一起,目前的解决方案是关闭bitcode,未来如果苹果强推bitcode,只能切换为lua

Clone this wiki locally