kirin77 发表于 2021-8-12 20:15

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]
查看完整版本: xlua使用unity协程笔记