找回密码
 立即注册
查看: 415|回复: 0

toLua学习笔记十六——lua调用c#的委托和事件

[复制链接]
发表于 2021-10-24 07:27 | 显示全部楼层 |阅读模式
    委托
      委托中加函数执行委托函数委托中减函数清空委托函数
    事件
      事件中加函数事件中减函数事件中清空函数


首先在c#脚本中定义委托和事件
  1. publicclassLesson{publicUnityAction del;publiceventUnityAction eventAction;publicvoidDoDel(){if(del!=null)del();}publicvoidDoEvent(){if(eventAction!=null)eventAction();}publicvoidClearEvent(){
  2.         eventAction =null;}}
复制代码
委托

委托其实就是用来装函数的,要使用c#中的委托,就是用来装lua函数。
在lua中定义一个委托函数
  1. local obj =Lesson()local fun =function()print("lua函数")end
复制代码
委托中加函数

lua中没有复合运算符,不能直接+=,并且如果是第一次往 委托中加函数,因为委托是nil,不能直接+,第一次要先=
  1. obj.del = fun
  2. obj.del = obj.del + fun
  3. obj.del = obj.del +function()print("临时声明的函数")end
复制代码
执行委托函数

在tolua中,没办法直接执行obj.del(),所以要在c#中封装一层调用的成员方法,在lua中调用该方法。
  1. obj:DoDel()
复制代码
委托中减函数
  1. obj.del = obj.del - fun
  2. obj.del = obj.del - fun
  3. obj:DoDel()
复制代码
清空委托函数
  1. obj.del =nil
  2. obj:DoDel()
复制代码
事件

首先在lua中定义一个事件函数
  1. local fun2 =function()print("事件加的函数")end
复制代码
事件的使用方法和委托类似,但是因为事件要遵循c#的规则,不能直接 = ,要直接+=或者-=
事件中加函数
  1. --obj.eventAction = fun2 会报错
  2. obj.eventAction = obj.eventAction + fun2
  3. obj.eventAction = obj.eventAction +function()print("事件加的匿名函数")end
  4. obj:DoEvent()
复制代码
事件中减函数
  1. obj.eventAction = obj.eventAction - fun2
  2. obj:DoEvent()
复制代码
事件中清空函数
  1. obj:ClearEvent()
  2. obj:DoEvent()
复制代码
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-11-24 19:38 , Processed in 0.089141 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表