UH2S3L17——Lua调用协程

本章代码关键字

1
2
3
4
5
6
7
StartCoroutine()        --开启协程,返回协程变量
StopCoroutine() --停止协程,传入要停止的协程变量
WaitForSeconds() --挂起协程,传入要挂起的秒数
Yield(0) --挂起协程,传入要挂起的帧数
WaitForFixedUpdate() --挂起协程,传入要挂起的物理帧帧数
WaitForEndOfFrame() --挂起协程,等待一帧渲染完后在执行后面的逻辑
Yield(异步加载返回值) --返回异步加载的返回值,相当于Unity协程中的yield return
1
LuaCoroutine.Register()  //lua协程注册,这样我们才能在Lua中使用tolua提供的协程函数,需要传入lua解析器,以及调用该方法的MonoBehaviour脚本自己

Lua调用C#协程

toLua提供给我们了一些方便的开启协程的方法,也可以直接使用类似Unity中的协程相关方法,前提是一定要注册lua协程相关内容

1
LuaCoroutine.Register(luaState, this);  //lua协程注册,这样我们才能在Lua中使用tolua提供的协程函数

这样,我们就可以在Lua中直接使用诸如StartCoroutine()​、StopCoroutine()​这种方法
并使用WaitForSeconds()​,WaitForFixedUpdate()​,Yield(异步加载返回值)​等函数挂起协程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
print("Lua访问C#协程")

local coDelay = nil

StartDelay = function()
coDelay = StartCoroutine(Delay)
end

Delay = function()
local c = 1
while true do
--可以直接使用类似Unity中的协程相关方法
WaitForSeconds(1)
--Yield(0)
--WaitForFixedUpdate()
--WaitForEndOfFrame()
--Yield(异步加载返回值)
print("Count: " .. c)
c = c + 1
if c > 5 then
StopDelay()
break
end
end
end

StopDelay = function()
StopCoroutine(coDelay)
coDelay = nil
end

StartDelay()