1
我有以下代码:为什么我的Button没有正确地注册输出?
void Setup(CityBuilding[] buildings) {
foreach (CityBuilding building in buildings)
{
GameObject buildingDisp = Instantiate(singleGoodsDisplay);
//... Other stuff not relevent happens here
buildingDisp.GetComponent<Button>().onClick.AddListener(() => { ProcessClick(building); });
Debug.Log(building);
}
}
private void ProcessClick(CityBuilding building)
{
Debug.Log(building);
}
底线是,我有一个保存为一个预制和实例化的几个按钮。我正在以一个lambda函数的形式向它添加一个onClick监听器。我传入一个数据对象。现在buildings
是两个数组。我看到两个项目都被调试,但是,当我实际点击按钮时,我总是看到第二个项目被使用,而不是第一个项目。我不太确定我做错了什么。有什么想法吗?谢谢!
我不知道在C#中的行为是否相同,但如果您在JavaScript中有类似的事情,那么点击发生时,本地“建筑物”将始终引用集合中的最后一个项目。 –
显然它在C#5中被更改了,所以变量在每次迭代中都被视为“新”,因此无视。 –