先看一下简单例子:
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