首页 > 编程语言 >Unity热更学习--Lua脚本使用C#中的事件、委托和协程

Unity热更学习--Lua脚本使用C#中的事件、委托和协程

时间:2024-05-25 16:45:47浏览次数:23  
标签:dele -- end eventAction Lua student print 协程

[14]lua调用使用C#中的事件和委托

C#脚本:继续在Student类中声明

 //声明委托和事件
public UnityAction dele;
public event UnityAction eventAction;

public void DoDele()
{
    if (dele != null)
        dele();
}

public void DoEvent()
{
    if (eventAction != null)
        eventAction();
}

public void ClearEvent()
{
    eventAction = null;
}

lua中进行调用:

--使用委托
function testFun() 
    print("我在委托中执行 testFun")
end

--第一次委托添加函数时候要直接赋值
student.dele = testFun

student.dele = student.dele + function()  
    print("我是匿名函数哈哈哈")
end

--不可以直接执行委托 student。dele() 
student:DoDele()

--取出函数
student.dele = student.dele - testFun
print("减去TestFun函数")
student:DoDele()

--清空委托中的函数
student.dele = nil

--使用事件
function testFun1()
    print("我在事件中执行 testFun1")
end

function testFun2()
    print("我在事件中执行 testFun2")
end

student.eventAction = student.eventAction + testFun2
student.eventAction = student.eventAction + testFun1

--触发事件
student:DoEvent()

--从事件中移除函数
student.eventAction = student.eventAction - testFun2
print("再次触发事件")
student:DoEvent()

--不可以直接移除事件
print("事件清除")
student:ClearEvent()

[15]lua调用使用Unity中的协程

----使用C#中的协程
--声明一个协程类型
local Timer = nil

function Counter() 
    local t = 0
    while true do
        print(t)
        WaitForSeconds(1)
        t = t + 1
        if t > 60 then
            StopTimer()
            break
        end
    end
end
--开启计时器
function StartTimer()
    Timer = StartCoroutine(Counter)
end
--停止协程
function StopTimer()
    StopCoroutine(Timer)
    Timer = nil
end
--调用函数开启计时器
StartTimer()

注意在lua调用入口进行LuaCoroutine注册

image-20240525162235614

标签:dele,--,end,eventAction,Lua,student,print,协程
From: https://www.cnblogs.com/TonyCode/p/18212582

相关文章

  • Java 多线程编程 力扣实题
    多线程编程实例了解内存模型、线程通信和线程安全之后,对多线程编程已经有了理论上的认知,现在来实战一下。所有题目在https://leetcode.cn/problemset/concurrency/。按序打印题干描述给你一个类:publicclassFoo{publicvoidfirst(){print("first");}publicvoidseco......
  • Java 多线程编程基础
    我们的应用程序都是运行在多线程的环境下的,在多线程环境下的许多问题我们都了解吗?线程间如何进行数据交换?线程间如何进行通信与协作?共享一个资源时如何保证线程安全?线程数据交换线程之间无法直接访问对方工作内存中的变量,必须通过主内存进行变量的传递。例如,线程A、B共享一......
  • Java ThreadPoolExecutor
    ThreadPoolExecutor?ThreadPoolExecutor是什么,先拆开来看,ThreadPoolAndExecutor?那ThreadPool是什么?Executor又是什么?Executor:任务执行者,只定义了一个execute方法,接收一个Runable参数。publicinterfaceExecutor{voidexecute(Runnablecommand);}ThreadPool:可以缓存......
  • vue指令
    内容渲染指令v-html 指令用于将包含HTML代码的字符串作为HTML插入到元素中,从而实现动态渲染HTML内容。条件渲染指令v-show和v-if区别及其使用场景v-show1.作用:控制元素显示隐藏2.语法:v-show="表达式"表达式值true显示,false隐藏3.原理:切换display:none控......
  • Content-Type 'application/json;charset=UTF-8' is not supported异常解决
    Content-Type'application/json;charset=UTF-8'isnotsupported异常解决前提:确定不是因为Content-Type导致的异常,controller层有注解@RequestBody。报错详情:确定不是因为缺少Jackson依赖或者版本过低:注意到报错信息上边有一条警告日志:.c.j.MappingJackson2HttpMessageCo......
  • BUUCTF-Misc(31-40)
    荷兰宽带数据泄露参考Bugku宽带信息泄露详解MISC_bugku宽带信息泄露-CSDN博客bin文件:二进制文件,其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件,只是表明它是binary格式。比如虚拟光驱文件常用".bin"作为后缀,但并不意味着所有的bin文件都是虚......
  • 只打印一次(状态改变时)
    为了防止日志一直打印输出,只在状态改变时打印一次#include<iostream>intmain(){/////////////////////////////////////////对于两种状态切换情况{boolm_bOnline=true;//默认在线boolm_bFlag1=true;//默认都是“开”bo......
  • 在lcd屏幕显示圆
    *name;Circle*function:画圆*parameter;none*ReValue;none*author;小北blog*attention;none*date;2024.05.10*Copyright(c)[email protected]*****************************************************************/#incl......
  • 切换python3 版本
    在Ubuntu上安装了多个Python版本后,你可以使用`update-alternatives`命令来管理和切换默认的Python版本。以下是具体步骤:###使用`update-alternatives`切换Python版本1.**添加Python3.12到`update-alternatives`系统:**```bashsudoupdate-alternatives......
  • 容器配置nginx
    1.docker命令#启动容器dockerrun-it--namenginx-test-p8888:80--mounttype=bind,source=/data/volumes/nginx,target=/data--mounttype=bind,source=/data/volumes/nginx/nginx.conf,target=/etc/nginx/nginx.confnginx:latest#命令行进入容器dockerexec-......