Я столкнулся с проблемой и почти час пытался ее решить. Я делюсь этим на всякий случай, если кто-то может столкнуться с той же проблемой. Для более ясного объяснения вопроса и ответа приведем пример:
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);
}
А вот назначение l oop:
private void AssignClickEvents()
{
for (int i = 0; i < buttonList.Count; i++)
{
buttonList[i].GetComponent<Button>().onClick.AddListener(() => { Test(i); });
}
}
Проблема с приведенным выше кодом состоит в том, что при нажатии кнопки она не даст вам 0,1,2 ... et c. Все кнопки дают вам одно и то же значение, которое является последним назначенным значением l oop параметра 'i'. Проверьте ответ для решения: