[UNITY]2DRPG開発日誌 #66 for文でEventTriggerを登録するとiの値がおかしくなる

さて、複数のボタンを生成する際、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 を渡すと解決しました。