先看一下简单例子:
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()); });
        }
    }
原文:https://www.cnblogs.com/godshadow/p/14993656.html