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

17 篇文章 4 订阅

首先在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()
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值