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