Unity XLua 协程封装

Unity XLua 协程封装

  • 依附Unity中的MonoBehaviour对象来开启协程
  • MonoBehaviour对象只需要是空的脚本,主要来进行协程的开启
  • 外界使用时只需要对该协程对象进行操作

1.封装cs_coroutine

local util = require("xlua.util")

local obj = CS.UnityEngine.GameObject("Coroutine")
CS.UnityEngine.Object.DontDestroyOnLoad(obj)
---@type UnityEngine.MonoBehaviour
local mono = obj:AddComponent(typeof(CS.TestMono))

return{
    start = function(...)
        return mono:StartCoroutine(util.cs_generator(...))
    end,
    stop = function(co)
        mono:StopCoroutine(co)
    end,
    stopAll = function()
        mono:StopAllCoroutines()
    end
}

2.使用cs_coroutine(1)

local cs_coroutine = require("Lesson23")

local co_a = cs_coroutine.start(function()
    print("coroutine a started")
    
    coroutine.yield(cs_coroutine.start(function()
        print("coroutine b stated inside coroutine a")
        coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
        print("i am coroutine b")
    end))
    print("coroutine b finish")
    while true do
        coroutine.yield(CS.UnityEngine.WaitForSeconds(1))
        print("i am coroutine a")
    end
end)

cs_coroutine.start(function()
    print("stop coroutine a after 5 seconds")
    coroutine.yield(CS.UnityEngine.WaitForSeconds(5))
    cs_coroutine.stop(co_a)
    print("coroutine a stop")
end)

3.使用cs_coroutine(2)

  • 满足条件停止自身协程
local cs_coroutine = require("Lesson23")
co = cs_coroutine.start(function()
    local a = 0
    while true do
        print(a)
        a = a + 1
        if a >= 5 then
            cs_coroutine.stop(co)
            co = nil
            for i, v in pairs(_G) do
                print(i,v)
            end
        end
        coroutine.yield(CS.UnityEngine.WaitForSeconds(0.2))
    end
end)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值