UH2S2L17——Lua调用委托和事件
调用委托
- 委托在Lua中和C#中商业差不多,唯一需要注意的是,当委托为空时不能直接加,要用
=
,之后才能加
- 事件的方法加减需要使用这种格式
对象:事件名("+/-", 函数变量)
,且不能直接清空,必须要在C#类里执行实现清空方法再通过Lua调用
先在C#脚本内声明如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class Lesson7 { public UnityAction del;
public event UnityAction eventAction;
public void DoEvent() { if (eventAction != null) eventAction(); } }
|
委托是用来装函数的,使用C#中的委托,就是用来装lua函数的
向委托添加函数
Lua中没有复合运算符 不能+=
,如果第一次往委托中加函数 因为是nil
,不能直接+
,所以第一次,要先等 =
1 2 3 4 5 6 7 8 9 10 11 12
| local obj = CS.Lesson7()
local fun = function() print("Lua函数Fun") end
obj.del = fun obj.del = obj.del + function() print("临时申明的函数") end obj.del()
|
向委托移除函数
向委托移除方法也和简单,直接减-
即可,这也是为什么尽可能不使用匿名函数的原因,因为无法直接移除,只能清空
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| print("*********开始加函数***********")
obj.del = fun obj.del = obj.del + fun obj.del = obj.del + function() print("临时申明的函数") end obj.del()
print("*********开始减函数***********") obj.del = obj.del - fun obj.del = obj.del - fun
obj.del()
|
清空函数
清空直接将委托赋值为nil
即可
1 2 3 4
| obj.del = nil obj.del = fun obj.del()
|
调用事件
事件添加函数
事件加减函数,和委托非常不一样
lua中使用C#事件加函数,有点类似使用成员方法,类似于对象:事件名("+", 函数变量)
1 2 3 4 5 6 7 8 9 10
| local fun2 = function() print("事件加的函数") end
obj:eventAction("+", fun2) obj:eventAction("+", fun2) obj:eventAction("+", function() print("事件加的匿名函数") end) obj:DoEvent()
|
事件移除函数
移除方法也很简单
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| local fun2 = function() print("事件加的函数") end
print("*********开始加函数***********") obj:eventAction("+", fun2) obj:eventAction("+", fun2) obj:eventAction("+", function() print("事件加的匿名函数") end) obj:DoEvent()
print("*********开始减函数***********") obj:eventAction("-", fun2) obj:DoEvent()
|
清空事件
清事件,不能直接设置为nil
,因为事件一般不能让外部去清空,
因此我们需要在C#类内部自行声明清空方法,然后让外部调用这个方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public class Lesson7 { public UnityAction del;
public event UnityAction eventAction;
public void DoEvent() { if (eventAction != null) eventAction(); }
public void ClearEvent() { eventAction = null; } }
|
1 2
| obj:ClearEvent() obj:DoEvent()
|