以下xLua函数来自xLua demo中的util.lua.txt文件 -- 利用xLua协程使函数func异步执行 local function coroutine_call(func) local co = coroutine.create(func) assert(coroutine.resume(co)) end标签: xLua« xLua——C#扩展方法与xLua泛型 | xLua——动态热更» ...
coroutine_call()方法就很简单,就是创建一个新的协程然后启动它。 local function async_to_sync(async_func, callback_pos) return function(...) --coroutine.running() 返回当前正在运行的协程加一个布尔量。 如果当前运行的协程是主线程,其为真。 local _co = coroutine.running() or error ('this functi...
42 util.coroutine_call(corotineTest)(self, 4)--相当于CS的StartCorotine,启动一个协程并立即返回 43 print('---async call end---') 44 45 -- 方式二:沿用CS协程,优点:使用方便,可直接热更协程代码逻辑,缺点:不可以新增协程 46 self:StartCoroutine(self:TestCorotine(3)) 47 end) 48 49 -- cs侧...
在coroutine执行前作为方法 使用xxx() 调用, 在回调函数执行完成后做为变量接收返回值 高能注意: 不能在主线程中调用coroutine.yield()会报错LuaException: attempt to yield from outside a coroutine,其实自己并没有调用yield,但是async_to_sync中使用了这个方法 所以需要使用util.coroutine_call() 来开启一个协程...
CS.UIEventListener.Get(CS.UnityEngine.GameObject.Find("BtnBuy").gameObject).onClick = util.coroutine_call(buy) 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. message_panel.lua ...
一、定义:Lua为每个coroutine提供一个独立的运行线路,与多线程不同的地方是,coroutine只有在显式调用yield函数后才被挂起,同一时间内只有一个协程正在运行。 二、协程简单实例--创建协同cor1=coroutine.create(function()fori=1… 阅读全文 Unity热更新 Lua高级(四)面向对象详解 ...
创建出的协程默认是在挂起状态,我们可以使用 coroutine.resume() 来将协程转为运行状态,只需要把协程对象作为参数传进去即可。我们的 stepCor 方法就是将 cor 协程对象转为运行状态。 当我们第一次执行 stepCor 方法是,cor协程转为运行状态,执行其方法体,然后我们就会遇到方法体的第一行: ...
local M=class("CoroutineExample",target) function M:start() --[[-- 在C#脚本LuaBehaviour中定义的属性或者是通过Variables配置而虚拟出来的属性,都可以在Lua脚本中通过self.xxx 来访问 如下示例,通过self.startButton self.stopButton 访问启动和停止按钮,通过self.slider 访问滑动条 ...
[XLua.CSharpCallLua] public delegate double LuaMax(double a, double b); * 绑定 csharp var max = luaenv.Global.GetInPath<LuaMax>("math.max"); * 调用 csharp Debug.Log("max:" + max(32, 12)); 建议绑定一次,重复使用。生成了代码的话,调用max是不产生gc alloc的。 ## 热补丁 * 侵入性...
[XLua.CSharpCallLua] public delegate double LuaMax(double a, double b); 绑定 var max = luaEnv.Global.GetInPath<LuaMax>("math.max"); 调用 Debug.Log("max:" + max(32, 12)); 注意, 请不要重复调用 luaEnv.Global.GetInPath<LuaMax>, 这没有任何必要. 热补丁 除了使用 Lua 在 Unity 进行...