今天打包了一个简单的prefab,调用之后发现报一个奇怪的错误,说不在主线程中,百度之后说是AnimationClip加载的问题,在unity2017.3.b
中修复,于是把动画先干掉,坐等升级在弄吧。
用Vector3的时候,其实是用了lua自己实现的Vector3类,这里使用了
Vector3.__call = function(t,x,y,z) local t = {x = x or 0, y = y or 0, z = z or 0} setmetatable(t, Vector3) return t
当调用Vector(x,y,z)的时候,将一个table设置为x,y,z,并把它的元表设置为Vector3
这里我们也发现作者已经对位置赋值有所优化。
o = ToLua.ToObject(L, 1);
UnityEngine.Transform obj = (UnityEngine.Transform)o;
UnityEngine.Vector3 arg0 = ToLua.ToVector3(L, 2);
obj.position = arg0;
是通过读取lua堆栈的xyz来在c#层面新构建一个Vector3,这样速度会比直接在lua里使用c#的Vector3要快。
然后是Lua里面的Update.
它的原理是c#里的LuaLooper里的Update不断通过c调用lua语言里的Update函数。
理论上性能不是特别好。但lua本身是没有定时器的,所以这么做也无可厚非吧。
然后通过和蒙哥的交流,已经不能用Update来实现了,效率比价低,需要使用协程来做。
function Update() print(count) coroutine.wait(10) count = count + 1 coroutine.start(Update) end
这样子就可以了