さて、複数のボタンを生成する際、EventTriggerもfor文で回して登録したいことがありますよね。
すると、iの値がおかしく登録されてしまいました。例えば、こうすると、
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 のようです。
なので、こうする必要があります。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 を渡すと解決しました。