10.C#调用toLua提供的协同程序

10.CSharp调用Lua-toLua提供的协同程序


10.1 知识点

准备工作

LuaManager.Instance.Init();
LuaManager.Instance.Require("Lesson10_CSharp调用Lua_toLua提供的协同程序");

使用toLua提供的协程方法

local coroutineDelay = nil

function StartDelayPrint()
    --开启协程 toLua实现的coroutine的start方法 不是lua自带的
    --lua自带的是 create resume yield status wrap running
    coroutineDelay = coroutine.start(DelayPrint)
end

function DelayPrint()
    local i = 1

    while true do
        --每次打印等待1s toLua帮助我们实现的wait方法

        coroutine.wait(1)

        print("延迟打印:" .. i)
        i = i + 1

        --打印五次后停止协程
        if i >= 5 then
            StopDelayPrint()
            break
        end
    end
end

function StopDelayPrint()
    --停止协程 toLua帮助我们实现的stop方法
    coroutine.stop(coroutineDelay)
end

在C#中使用

如果想要Lua协程跑起来 需要添加一个LuaLooper脚本 一般在Lua管理器的初始化方法就加 设置LuaLooper的luaState是Lua管理器的

// 初始化 LuaLooper,该组件用于处理 Lua 中的协程
LuaLooper loop = gameObject.AddComponent<LuaLooper>();
loop.luaState = luaState;

直接执行协程

//获取延迟函数
LuaFunction function = LuaManager.Instance.LuaState.GetFunction("StartDelayPrint");
//执行延迟函数
function.Call();
//销毁
function.Dispose();

10.2 知识点代码

Lesson10_CSharp调用Lua_toLua提供的协同程序.lua

print('我是Lua脚本 Lesson10_CSharp调用Lua_toLua提供的协同程序')

local coroutineDelay = nil

function StartDelayPrint()
    --开启协程 toLua实现的coroutine的start方法 不是lua自带的
    --lua自带的是 create resume yield status wrap running
    coroutineDelay = coroutine.start(DelayPrint)
end

function DelayPrint()
    local i = 1

    while true do
        --每次打印等待1s toLua帮助我们实现的wait方法

        coroutine.wait(1)

        print("延迟打印:" .. i)
        i = i + 1

        --打印五次后停止协程
        if i >= 5 then
            StopDelayPrint()
            break
        end
    end
end

function StopDelayPrint()
    --停止协程 toLua帮助我们实现的stop方法
    coroutine.stop(coroutineDelay)
end

Lesson10_CSharp调用Lua_toLua提供的协同程序

using LuaInterface;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson10_CSharp调用Lua_toLua提供的协同程序 : MonoBehaviour
{
    void Start()
    {
        LuaManager.Instance.Init();
        LuaManager.Instance.Require("Lesson10_CSharp调用Lua_toLua提供的协同程序");

        //如果想要Lua协程跑起来 需要添加一个LuaLooper脚本 一般在Lua管理器的初始化方法就加 设置LuaLooper的luaState是Lua管理器的

        //获取延迟函数
        LuaFunction function = LuaManager.Instance.LuaState.GetFunction("StartDelayPrint");
        //执行延迟函数
        function.Call();
        //销毁
        function.Dispose();
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏