unity-lua入门二

    今天打包了一个简单的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

这样子就可以了

猜你喜欢

转载自blog.csdn.net/yxriyin/article/details/78519979
今日推荐