首页 > 其他分享 >Lua热更学习--使用toLua中的协程

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

时间:2024-05-12 11:42:34浏览次数:17  
标签:function 协程 -- Lua table toLua CStudent

[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

标签:function,协程,--,Lua,table,toLua,CStudent
From: https://www.cnblogs.com/TonyCode/p/18187626

相关文章

  • consul部署
      下载二进制包下载地址:https://developer.hashicorp.com/consul/install https://releases.hashicorp.com/consul/1.18.1/consul_1.18.1_linux_amd64.zip 下载解压wgethttps://releases.hashicorp.com/consul/1.18.1/consul_1.18.1_linux_amd64.zip[root@mcw12......
  • AtCoder Beginner Contest 353
    AtCoderBeginnerContest353A-Buildings求第一个\(h_i\)大于\(h_1\)的位置。模拟。点击查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,h[103];signedmain(){ cin>>n;cin>>h[1]; for(inti=2;i<=n;i++){ cin&......
  • 100274. 从魔法师身上吸取的最大能量
    在神秘的地牢中,n 个魔法师站成一排。每个魔法师都拥有一个属性,这个属性可以给你提供能量。有些魔法师可能会给你负能量,即从你身上吸取能量。你被施加了一种诅咒,当你从魔法师 i 处吸收能量后,你将被立即传送到魔法师 (i+k) 处。这一过程将重复进行,直到你到达一个不存在 (i......
  • 补档 https://github.com/taichi-framework/TaiChi/wiki/FAQ/9eeeef88cdbcee6a2834969
    taichi-framework/TaiChiPublicNotificationsFork 572 Star 5.9kCodePullrequestsActionsWikiSecurityInsightsFAQ weishueditedthispage onNov2,2018 · 17revisions如何使用点击右下角浮动按钮,然后选择“创建应用”......
  • 在Asp
    在Asp.NetCore中使用AutoMapper进行对象映射怎样高效便捷的处理对象映射呢,我们可以使用AutoMapper来进行实体类到Dto在13.0以上的版本中,只需要安装AutoMapper包,在这之下的版本中还需要安装AutoMapper.Extensions.Microsoft.DependencyIn包。1.添加一个profile,他需要继承Profi......
  • 加练日记2-二分,双指针,排序
    二分模板 #include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constllMOD=998244353;lln,m;constllN=2e5+9;lla[N];llv[N];intf(llmid){ llans=0,pre=-1e9; for(inti=1;i<=n;i++){ if(a[i]-pre>=mid)ans++,pre=a[i......
  • TCP的四次挥手过程
    TCP连接是双向传输的对等的模式(全双工模式),就是说双方都可以同时向对方发送或接收数据。而断开的时候,也是双方都可以主动断开,此时需要经过四次挥手的过程,流程如下图所示:主动方发送FIN包给被动方,主动方状态变成FIN_WAIT_1,等待被动方的确认。此时主动方不能再发送数据。被动方收......
  • 解释一下这两行 "pub": "pnpm --filter \"./packages/*\" run pub", "pub:b
    F:\learn-front\code-inspector\package.json这两行命令是用于在JavaScript项目中发布(publish)软件包到npm仓库的脚本定义,常见于使用pnpm作为包管理器的Monorepo(单仓库多项目)结构的项目中。这里具体解释一下每部分的含义:pub:这是一个npm脚本的别名,当在命令行中执行npmrunp......
  • ST表
    0面向问题我们希望有一个数据结构能够解决静态区间求最值、gcd....等问题并且可以在\(O(nlogn)\)范围内预处理\(O(1)\)查询1思路ST表通常维护一些具有可合并性的东西,就是可以分别计算并且不在乎重复计算,比如最大最小值和最大公约数(但是区间和之类就不行)以最大值为例考......
  • 博客园商业化之路-众包平台:偶遇外包项目需求
    我们目前正在以众包平台的商业模式进行融资,在拿到融资之前,先以微信群+GitLab的原始方式运营筹建中的众包平台,目前在召集合作开发者,当前已召集到400多位开发者,在召集开发者的过程中就遇到了一些众包需求。园子的众包平台定位于开发任务的众包,平台分发给开发者的是具体明确的开......