首先在c#脚本中定义委托和事件
public class Lesson{
public UnityAction del;
public event UnityAction eventAction;
public void DoDel(){
if(del!=null)
del();
}
public void DoEvent(){
if(eventAction!=null)
eventAction();
}
public void ClearEvent(){
eventAction = null;
}
}
委托
委托其实就是用来装函数的,要使用c#中的委托,就是用来装lua函数。
在lua中定义一个委托函数
local obj = Lesson()
local fun = function ()
print("lua函数")
end
委托中加函数
lua中没有复合运算符,不能直接+=,并且如果是第一次往 委托中加函数,因为委托是nil,不能直接+,第一次要先=
obj.del = fun
obj.del = obj.del + fun
obj.del = obj.del + function ()
print("临时声明的函数")
end
执行委托函数
在tolua中,没办法直接执行obj.del(),所以要在c#中封装一层调用的成员方法,在lua中调用该方法。
obj:DoDel()
委托中减函数
obj.del = obj.del - fun
obj.del = obj.del - fun
obj:DoDel()
清空委托函数
obj.del = nil
obj:DoDel()
事件
首先在lua中定义一个事件函数
local fun2 = function ()
print("事件加的函数")
end
事件的使用方法和委托类似,但是因为事件要遵循c#的规则,不能直接 = ,要直接+=或者-=
事件中加函数
--obj.eventAction = fun2 会报错
obj.eventAction = obj.eventAction + fun2
obj.eventAction = obj.eventAction + function ()
print("事件加的匿名函数")
end
obj:DoEvent()
事件中减函数
obj.eventAction = obj.eventAction - fun2
obj:DoEvent()
事件中清空函数
obj:ClearEvent()
obj:DoEvent()