Lua热更学习--使用toLua中的协程

lua,tolua · 浏览次数 : 0

小编点评

**C# Accessing Table Class Members and Methods** ```csharp // Get the table instance CStudent cStudent = CallLuaManager.Instance().LuaState.GetTable("CStudent"); // Access the function named "CStudent" cStudent.GetLuaFunction("CStudent").Call("TonyChang", "男"); // Access the table's function named "print" cStudent.CStudent.print("table中的函数"); ``` **lua Script (Main.lua)** ```lua -- Create a CStudent object CStudent = {\t_name = "TonyChang", \t_id = "202499990101", \t_sex = "male", \tCStudent = function() \t\tprint("table中的函数")\tend} -- Call the CStudent constructor and pass the "TonyChang" and "男" arguments CStudent.GetLuaFunction("CStudent").Call("TonyChang", "男") ``` **Notes:** * The `CallLuaManager.Instance()` method provides access to the Lua state in C#. * The `GetFunction()` method retrieves a function named "CStudent" from the table. * The `Call()` method executes the function and passes the "TonyChang" and "男" arguments. * The `CStudent.print()` method calls the "print" function on the table. * The `coroutine.start()` method creates a coroutine that calls the `Timer()` function in a loop. * The `StopTimer()` function stops the coroutine and returns a reference to it. * The `toLua` module provides support for coroutines, but it does not support coroutines directly. * The `LuaLooper` component is a Lua state virtual machine that can be used to execute Lua code from C#.

正文

[6] C#访问调table类中的成员变量和函数

访问table中的变量和函数

lua中可以使用table作为class,因此对table中的函数访问调用是必要的根据前面对table访问和function的获取调用,这里尝试获取调用。

依然是如此,此种调用方式获取到的table中的函数是引用拷贝。

Main.lua脚本新增内容

CStudent = {
	_name = "TonyChang",
	_id = "202499990101",
	_sex = "male",
	CStudent = function()
		print("table中的函数")
	end
}  

测试脚本中的调用内容:

//--------------------------------获取类类型table
LuaTable CStudent = CallLuaManager.Instance().LuaState.GetTable("CStudent");
//执行构造函数
CStudent.GetLuaFunction("CStudent").Call("TonyChang","男");
//打印结果
Debug.Log(CStudent["_name"]+" ," + CStudent["_id"] +" ," +CStudent["_sex"]);

使用toLua中的协程

lua中不支持协程,使用toLua中提供的协程方式来使用协程。

在使用协程之前,需要在管理类中添加LuaLooper组件,并将其LuaState与外部使用执行的LuaState虚拟机绑定。

LuaLooper luaLooper = gameObject.AddComponent<LuaLooper>();
// Debug.Log(gameObject.name);
luaLooper.luaState = _luaState;

Main.lua中的协程:

--使用toLua中提供的协程
--制作计时器
function Timer()  
	local t = 1
	while t < 20 do
		t = t + 1
		coroutine.wait(1)
		print(t)
	end
	StopTimer()
end
local coroutlineTimer = nil

function StartTimer()
	print("run")
	--开始协程时候传入类型为函数
	coroutlineTimer = coroutine.start(Timer)
end

function StopTimer()
	--传入要结束的协程
	coroutine.stop(coroutlineTimer)
end
 

我们在C#测试脚本中开启协程:

 //----------------------------------开始计时器
 LuaFunction startTimer = CallLuaManager.Instance().LuaState.GetFunction("StartTimer");
 startTimer.Call();
 startTimer.Dispose();

image-20240512112431495

当然也可以传入参数设置计时时长:

image-20240512112758804

与Lua热更学习--使用toLua中的协程相似的内容:

Lua热更学习--使用toLua中的协程

[6] C#访问调table类中的成员变量和函数 访问table中的变量和函数 lua中可以使用table作为class,因此对table中的函数访问调用是必要的根据前面对table访问和function的获取调用,这里尝试获取调用。 依然是如此,此种调用方式获取到的table中的函数是引用拷贝。

Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本

[0]toLua的导入 下载toLua资源包,访问GitHub项目地址,点击下载即可。 将文件导入工程目录中: 导入成功之后会出现Lua菜单栏,如未成功生成文件,可以点击Generate All 重新生成(注意很可能是路径问题导致的生成失败!) 之后就可以开始编写脚本执行第一个lua程序了! [1]

热更学习笔记10~11----lua调用C#中的List和Dictionary、拓展类中的方法

[10]Lua脚本调用C#中的List和Dictionary 调用还是在上文中使用的C#脚本中Student类: lua脚本: print(" 访问使用C#脚本中的List和Dictionary ") student.list:Add(2024) student.list:Add(5) studen

热更学习笔记--toLau中lua脚本对C#中枚举和数组的访问

[8]Lua脚本调用C#中的枚举学习 --调用枚举类型 print(" toLua中调用C#中枚举类型 ") PrimitiveType = UnityEngine.PrimitiveType local cubeObj = GameObject.CreatePrimitive(PrimitiveT

lua

Skywalking 监控nginx的方法 https://blog.csdn.net/qq_31725371/article/details/85226116 https://www.jianshu.com/p/30684f94d5e0 过程 安装必备软件: yum install -y gcc

使用自定义lua解析管理器调用lua脚本中的table

[5] 使用自定义lua解析管理器调用table 访问数组类型的table CallLuaEntrance测试脚本中内容: // 访问table //4.1 访问list/数组类型的table //获取table LuaTable luaTable = CallLuaManager.Instance

[4]自定义Lua解析器管理器-------演化脚本V0.7

使用自定义委托通过tolua来调用多返回值和长参数类型的函数。 防踩坑指南,使用自定义委托需要将委托类型添加到CustomSettings中。

自定义Lua解析器管理器-------演化脚本V0.5

[3]自定义Lua解析器管理器 演化脚本V0.5 方便我们在项目中使用Lua解析方法,我们封装管理一个lua解析器,管理LuaState的方法执行。 解析器脚本: using LuaInterface; namespace BaseFramework { /// /// 自定义的

[转帖]lua入门

入门 [TOC] @date: 2018-3-18 简介 Lua的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。 作为一门过程型动态语言,Lua有着如下的特性: 变量名没有类型,值才有类型,变量名在运行时可与任何类型的值绑定; 语言只提供唯一一种数据结构,称为表(table)

[转帖]lua-book

http://me.52fhy.com/lua-book/chapter2.html 数据类型 [TOC] @date: 2018-3-18 Lua中有8个基本类型分别为:nil、boolean、number、string、table、function、userdata、thread。 函数 typ