-
Notifications
You must be signed in to change notification settings - Fork 436
常见问题
- “我用luajit编译的dll可以使用,但是我用lua5.3编译的dll会导致unity闪退,怎么办”
增加LUA_5_3
的宏 (见 Unity 文档),删除Library目录,重新打开unity,就可以了,是因为之前的缓存代码是针对luajit的
- "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的尺寸.
- 有没有更完整的demo?
请参考 https://github.com/lulersoft/me_SLua
- slua支持protobuf/json/sqlite吗?
slua仅专注解决lua和c#绑定的问题, 保证这部分功能足够内敛精简, 任何第三方lua库都可以用, 但这需要你自己编译进入slua库里, 不要问我如何编译他们, 当你打算使用这些库时, 一般情况你应该懂得如何编译他们了.
- 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)
- 能不能知道那些调用是走了反射方法?
从slua1.0后,增加了一个宏SLUA_CHECK_REFLECTION,添加这个宏到工程中,当发生反射调用时,会当作警告输出。
14)如何支持iOS9的bitcode?
如果要支持iOS 9的bitcode,需要使用lua 而不是luajit,因为luajit有部分代码是直接生成native代码,不是LLVM的IR的中间代码(bitcode)导致不能link到一起,目前的解决方案是关闭bitcode,未来如果苹果强推bitcode,只能切换为lua