2017-04-26 78 views
0

我遇到了UI偵聽器的問題。我嘗試將點擊偵聽器分配給用於UI的for循環中的方法,但是每次我選擇了最後一個選項時。UI按鈕偵聽器AddListener不能在循環中工作

public Button[] options; 

void Start() 
{ 
    for(int i = 0; i < options.Length; i++) 
    { 
     options[i].onClick.AddListener(()=> {OptionPressed(i);}); 
    } 
} 

private void OptionPressed(int i) 
{ 
    print (i); 
} 

它總是打印3.我的問題是爲什麼?還有爲什麼3只有3個按鈕,所以它應該是2?

回答

4

它會打印3,因爲您不是裝箱的價值i,它的價值會在每次迭代時重新寫入。
要解決這個問題嘗試做這樣的事情:

for (int i = 0; i < options.Length; ++i) 
{ 
    int j = i; 
    options[i].onClick.AddListener(() => { OptionPressed(j); }); 
} 

Check the difference

+3

這個問題已經被問了很多次,它現在應該被關閉爲重複,除非在從問題的腳本另一個問題。 – Programmer

+1

謝謝@ m.rogalski,我應該考慮一下。 – goodm