You’re capturing the variable i
in your lambda expression. When that lambda expression is executed, it will use the “current” value of i
– which will always be 9. You want to capture a copy of the variable… which you can do be introducing a new variable in the loop:
for (int i = 0; i < teamButtons.Length; i++)
{
int index = i;
teamButtons[i].onClick.AddListener(() => SetCard(c[index]));
}