xlua使用unity协程笔记
记录一下,代码及注释如下,具体使用还需加工,需要单独写类去管理local util = require 'xlua.util' --xlua封装好的工具类,路径xlua/Resources/xlua/util.lua.txt
local go = CS.UnityEngine.GameObject("corGo") --创建对象,不需要new关键字
local coroutineCom = go:AddComponent(typeof(CS.CoroutineMine)) --空脚本,无逻辑代码,只是用来启动协程,注意C#定义的类前要加“CS.”
local startCoroutine = function (func,...) --定义启动协程的方法,参数一为方法,参数二为运行参数一方法的参数
return coroutineCom:StartCoroutine(util.cs_generator(func,...)) -- util中定义好的函数
end
startCoroutine(function () --启动协程
print("0s")
coroutine.yield(CS.UnityEngine.WaitForSeconds(1)) -- 使用unity的WaitForSeconds等待1s
print("1s")
local i = 0
local waitUntil = CS.UnityEngine.WaitUntil(function ()-- 创建unity的WaitUntil
return i>=3
end)
startCoroutine(function () --启动另一个协程,修改变量i的值
for index = 1, 3, 1 do
i = i +1
print(i)
coroutine.yield( CS.UnityEngine.WaitForSeconds(1) )
coroutine.yield(nil) --相当于 yield returnnull
end
end)
coroutine.yield(waitUntil) --使用unity的WaitUntil等待判断条件成立
coroutine.yield( startCoroutine(function () --启动另一个协程,并等待协程完成
for index = 1, 3, 1 do
coroutine.yield( CS.UnityEngine.WaitForSeconds(1) )
end
end) )
print("True")
end)
页:
[1]