[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 を渡すと解決しました。

UNITY
スポンサーリンク
Follow Us
KITTYPOOL
タイトルとURLをコピーしました