さて、複数のボタンを生成する際、EventTriggerもfor文で回して登録したいことがありますよね。
すると、iの値がおかしく登録されてしまいました。例えば、こうすると、
for(int i = 0; i < maxValue; i++) { EventTrigger.Entry entry = new EventTrigger.Entry(); entry.eventID = EventTriggerType.Submit; entry.callback.AddListener((data) => { MyMethod(i); }); trigger.triggers.Add(entry); }
こうすれば、MyMethodに 引数i を順番に渡したボタンが作れるかな、と思うと、全てのボタンの 引数i がmaxValueになります。
どうやら、MyMethodが呼び出される時に参照されるのはfor内でインクリメントされた最終的な i のようです。
なので、こうする必要があります。
for(int i = 0; i < maxValue; i++) { int index = i; EventTrigger.Entry entry = new EventTrigger.Entry(); entry.eventID = EventTriggerType.Submit; entry.callback.AddListener((data) => { MyMethod(index); }); trigger.triggers.Add(entry); }
EventTriggerに登録直前の i を int index = i; で保存し、引数として index を渡すと解決しました。