Unity 循环里给按钮添加绑定事件

问题

先看一下简单例子:

using UnityEngine;
using UnityEngine.UI;

public class TestClass : MonoBehaviour
{
    public Button[] Btn = new Button[3];

    private void ButtonListenSetUp()
    {
        for(int i = 0; i < Btn.Length; i++)
	    Btn[i].onClick.AddListener(() => { Debug.Log((i + 1).ToString()); });
    }
}

输出结果

这是一个非常简单的例子,看着也没什么问题,
可当点击按钮时不管哪一个都是输出:‘3’

分析

你以为的绑定过程:

实际绑定过程:

解决方案

解决办法当然也有
在每次循环内部定义一个局部变量

private void ButtonListenSetUp()
    {
        for(int i = 0; i < Btn.Length; i++)
        {
            int temp = i;
            Btn[temp].onClick.AddListener(() => { Debug.Log((temp + 1).ToString()); });
        }
    }
posted @ 2021-07-10 13:32  yassine  阅读(192)  评论(0编辑  收藏  举报