18.Lua调用CSharp-协同程序
18.1 知识点
准备工作
启动Lua脚本
LuaManager.Instance.Init();
LuaManager.Instance.Require("Lesson18_Lua调用CSharp_协同程序");
定义别名
--别名
Input = UnityEngine.Input
KeyCode = UnityEngine.KeyCode
准备协程相关
必须要去Lua管理器注册Lua协程
-- LuaCoroutine.Register(luaState, this);
声明协程变量
local coroutineDelay = nil
声明协程函数
function Delay()
local c = 1
while true do
--可以直接使用类似Unity中的协程相关方法
--前提是一定要去Lua管理器注册 lua协程相关内容
--可以像C#一样返回不同返回值
WaitForSeconds(1)
--Yield(0)
--WaitForFixedUpdate()
--WaitForEndOfFrame()
--Yield(异步加载返回值)
print('Count: '..c)
c = c + 1
end
end
启动协程
--启动协程方法 和C#中类似
function StartDelay()
coroutineDelay = StartCoroutine(Delay)
end
-- 启动协程
StartDelay()
停止协程
----停止协程方法 和C#中类似
function StopDelay()
StopCoroutine(coroutineDelay)
coroutineDelay = nil
end
制作按空格开启协程,再次按空格停止协程的功能,创建Lua的的帧更新函数,在Unity中调用
--制作按空格开启协程 再次按空格停止协程的功能
function Update()
if Input.GetKeyDown(KeyCode.Space) then
-- 检测到空格键按下
if coroutineDelay ~= nil then
-- 如果协程正在运行,停止协程
print("停止协程")
StopDelay()
else
-- 如果协程未运行,重新启动协程
print("启动协程")
StartDelay()
end
end
end
LuaFunction luaUpdate;
void Start()
{
...
//tolua获取函数
luaUpdate = LuaManager.Instance.LuaState.GetFunction("Update");
}
private void Update()
{
//LuaFunctio函数通过Call方法调用
luaUpdate.Call();//我是Lua无参无返回值函数
}
18.2 知识点代码
Lesson18_Lua调用CSharp_协同程序.lua
print('我是Lua脚本 Lesson18_Lua调用CSharp_协同程序')
--别名
Input = UnityEngine.Input
KeyCode = UnityEngine.KeyCode
print("**********知识点一 准备协程相关************")
--必须要去Lua管理器 注册 Lua 协程
-- LuaCoroutine.Register(luaState, this);
--声明协程变量
local coroutineDelay = nil
--声明协程函数
function Delay()
local c = 1
while true do
--可以直接使用类似Unity中的协程相关方法
--前提是一定要去Lua管理器注册 lua协程相关内容
--可以像C#一样返回不同返回值
WaitForSeconds(1)
--Yield(0)
--WaitForFixedUpdate()
--WaitForEndOfFrame()
--Yield(异步加载返回值)
print('Count: ' .. c)
c = c + 1
-- if c > 5 then
-- StopDelay()
-- break
-- end
end
end
print("**********知识点二 启动协程************")
--启动协程方法 和C#中类似
function StartDelay()
coroutineDelay = StartCoroutine(Delay)
end
-- -- 启动协程
-- StartDelay()
print("**********知识点三 停止协程************")
----停止协程方法 和C#中类似
function StopDelay()
StopCoroutine(coroutineDelay)
coroutineDelay = nil
end
--制作按空格开启协程 再次按空格停止协程的功能
function Update()
if Input.GetKeyDown(KeyCode.Space) then
-- 检测到空格键按下
if coroutineDelay ~= nil then
-- 如果协程正在运行,停止协程
print("停止协程")
StopDelay()
else
-- 如果协程未运行,重新启动协程
print("启动协程")
StartDelay()
end
end
end
Lesson18_Lua调用CSharp_协同程序
using LuaInterface;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Lesson18_Lua调用CSharp_协同程序 : MonoBehaviour
{
LuaFunction luaUpdate;
void Start()
{
LuaManager.Instance.Init();
LuaManager.Instance.Require("Lesson18_Lua调用CSharp_协同程序");
//tolua获取函数
luaUpdate = LuaManager.Instance.LuaState.GetFunction("Update");
}
private void Update()
{
//LuaFunctio函数通过Call方法调用
luaUpdate.Call();//我是Lua无参无返回值函数
}
}
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com