1. 程式人生 > >Unity Button監聽onclick在StartCoroutine()中的使用

Unity Button監聽onclick在StartCoroutine()中的使用

做一個專案,關於從服務端拉取資料,然後客戶端用資料count來例項化Item數量,然後給Item加按鈕監聽。
這一操作在startCoroutine中執行,出了一個bug,找了一個下午中午找到了原因,但是不知道這是為啥,只好先記錄一下待以後考古。
button.onclick.addListner 這個方法裡面是一個委託, 在startCoroutine中執行時,在迴圈中傳物件進去最後點擊出來的都是最後一個物件。不好理解,上程式碼。

    class Test {
       public int a;
    }
    Button[] ts;
    // Use this
for initialization void Start () { ts = GameObject.FindObjectsOfType<Button>(); for (int i = 0; i < ts.Length; i++) { Test a = new Test() { a = i}; Button btm = ts[i]; btm.onClick.AddListener(() => { Debug.Log(a.a); }); } }

類似於這樣一段程式碼,在普通方法中能點擊出0.1.2.3但是在協程中只能出現ts.length