Unity通过for给按钮绑定事件传递参数注意

在通过for循环传递按钮在数组中所在下标时出现的问题

 for (int i = 0; i < _buttons.Length; i++)

        {

            _buttons[i].onClick.AddListener(() => OnButtonClick(index));

        }

在上面的代码块中最终传递的参数是i的最终值,解释如黄色区域文字

解决办法通过新建变量将按钮传递的参数指引向不同的地址,因为for每次执行都是新建的不同的变量,所以可以实现。

 for (int i = 0; i < _buttons.Length; i++)

        {

            int index = i;

            _buttons[i].onClick.AddListener(() => OnButtonClick(index));

        }

通过查询资料,发现C#中,当使用匿名委托时,会捕捉本地调用方法的完整上下文,原因是:

匿名委托在创建时会自动捕获其外部作用域中的变量,这样做的目的是为了确保在委托执行时,可

以访问到委托创建时的上下文状态:

匿名委托捕获本地调用方法的完整上下文有以下几个原因:

匿名委托实际上是一个闭包,它可以访问其创建时所在作用域中的变量。为了实现这

种闭包行为,编译器会将这些变量的引用保存在委托对象中,以便在委托执行时可以访问它们。

通过创建变量,让不同的按钮捕捉不同的上下文,或引用不同的变量。

                       

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值