Попробуйте так) должно понять что отдельный экземплярчик переменной, а не переменная из цикла.
по сути просто ссылалось на переменную цикла(область в памяти), а то что она меняется - делегат не волновало.
int currentNum = i;
....
delegate
{
Debug.Log(currentNum );
}
int i=0;
foreach()
{
go.transform.Find("btn1").GetComponent<Button>().onClick.AddListener(
delegate
{
Debug.Log( i );
}
i++;
}
Есть писать внутри delegate то при каждом нажатии на любую из 20 моих кнопок выполняется одно действие(добавляется единица и выводится 0 1 2 ..), как для всех кнопок сделать чтоб разный результат был (для 0 кнопки показывало 0 для 10 - 10 для 20 - 20...)
еще раз перечитайте.
вы везде в делегат подсовываете ссылку на i.
не на отдельную переменную, созданную в цикле. а на одну переменную на весь цикл.
в конце цикла у i будет какое то значение. ОБЩЕЕ для всех делегатов.
ДЕЛЕГАТ - НЕ ПОМНИТ!! значения на момент его "присваивания".
он просто выведет вам текущее значение i по ссылке. замыкание и все такое.
ВНУТРИ ЦИКЛА надо создавать отдельную переменную, выделяя ей свою область памяти.
int currentNum = i;
чтобы избежать замыкания.