Repository navigation
problem
1、绑定lua function报错
local button = child("buttonName").gameObject;
UIEventListener.Get(button).onClick = OnClick;
这个事件关联代码在iOS下是报错的,不能够正确执行(安卓没事)
感谢yongkangchen同学提示:ulua的README.txt里最后一段有说明。只要在CheckType.cs的第一行定义#define __NOGEN__,那么所有平台使用这种代码都会报错了。(如果要发布ios平台的话,建议定义上去,方便日常开发。)
感谢chiuan同学的下述代码贡献,通过Lua通知C#的添加方式,绕过了这个问题
public static void AddClick(GameObject go,object lua){
UIEventListener.Get(go).onClick += delegate(GameObject o){
LuaFunction func = (LuaFunction)lua;
func.Call();
};
}
2、中文编码问题 感谢cnlas同学的下述代码贡献(大前提是lua文件编码要存成UTF8):
Lua.cs Line159
if (LuaDLL.luaL_loadbuffer(L, chunk, chunk.Length, name) != 0)
改为
if (LuaDLL.luaL_loadbuffer(L, chunk, System.Text.Encoding.UTF8.GetByteCount (chunk), name) != 0)
Line 225
if (LuaDLL.luaL_loadbuffer(L, chunk, chunk.Length, chunkName) == 0)
改为
if (LuaDLL.luaL_loadbuffer(L, chunk, System.Text.Encoding.UTF8.GetByteCount (chunk), chunkName) == 0)
原因是对于中文等双字节字符,string.Length的返回值是把一个汉字当一个计数的,这样底层的库去parser时候就等于没读完整。
3、ulua(luainterface)对c#对象错误处理,导致不同对象,引用同一个对象的bug 感谢pangweiwei提出, yongkangchen补充:
local v1=Vector3(1,1,1)
local v2=Vector3(1,1,1)
v1.x = 100
print(v1.x, v2.x)
你会发现v2.x也变成100了。
原因: luainterface用dictionary存储的vector, 而dict是用的object.hashcode() 所有的c# object都是存储在dict里的,任何对象的hashcode一样,都可能导致obj是同一个,而Vector的hash实现刚好是用x,y,z的值来计算的。
可能解决方案,未验证: 参考这2个commit https://github.com/NLua/NLua/commit/81d6d81b901c1cb7cec52cf1d73a49c993a3abe6#commitcomment-7216098 https://github.com/NLua/NLua/commit/a679211b0965b565d6b07f1823141fc3dcdf4280#diff-a1af65e626ad314e476457fd5774054f
4、EntryPointNotFoundException: luaL_newstate 感谢isaachu同学找到问题所在:EntryPointNotFoundException: luaL_newstate这个错误是因为在如果在Unity中是设置了iPhone平台,但是uLua的代码没有排除Editor环境,DllImport错误造成的。
5、一个是DLL没有找到的问题(DllNotFoundException: ulua),目前得到的结论是,真机没有打包libulua.so进包导致,或者模拟器也有些设置不对。打包的时候把libulua.so打包进libs\armeabi-v7a
6、ios平台真机发布注意设置, 不然会提示找不到c#对象的属性
ApiCompatibility Level: .NET 2.0 Subset
Stripping Level: Disabled