【发布时间】:2020-06-04 19:59:44
【问题描述】:
我遇到了这个问题,并尝试解决了将近一个小时。我分享这个以防万一有人遇到同样的问题。为了更清楚地解释问题和答案,这里举个例子:
1) 假设您动态创建了一些按钮对象并将它们添加到列表中:
private void CreateButtons(int length)
{
for (int i = 0; i < length; i++)
{
var newButton = Instantiate(buttonPrefab);
buttonList.Add(newButton);
}
}
2)然后你想为不同的按钮分配相同的功能,但参数不同:
这是分配的方法:
private void Test(int a)
{
print(a);
}
这里是分配循环:
private void AssignClickEvents()
{
for (int i = 0; i < buttonList.Count; i++)
{
buttonList[i].GetComponent<Button>().onClick.AddListener(() => { Test(i); });
}
}
上面代码的问题是,当一个按钮被点击时,它不会给你 0,1,2... 等等。所有按钮都会给你相同的值,这是循环参数 'i 的最后分配值'。检查答案以获得解决方案:
【问题讨论】:
标签: unity3d events button onclick