1. 程式人生 > >給UGUI的Button動態新增OnClick監聽中的BUG

給UGUI的Button動態新增OnClick監聽中的BUG

Button[] players;
//錯誤
for(int i =0;i<players.Length;i++)
{
players[i].onClick.AddListener (delegate() {
				this.PlayerBtnClick(players[i].gameObject); 
			});
}
//正確
foreach(Button go in players){
			go.onClick.AddListener (delegate() {
				this.PlayerBtnClick(go.gameObject); 
			});
		}
}

在用for迴圈動態新增Onclick的時候發現一個問題,當用錯誤寫法 onclick的時候發生陣列越界,一開始怎麼也想不明白,後來發現呼叫Onclick的時候,i = player.Length ,所以陣列越界,改為foreach即可

原因猜測  i  每次呼叫的同一個物件 至於為什麼呼叫 我就不清楚了 希望有人能夠解答一下 ,如果一定要用for 可以重新賦值一下