onClick.AddListenerでボタン処理取付とループ時の注意

2021/02/11

Unity

以下でスクリプトからボタンの処理を取り付けできる。
Button btn;
btn.onClick.AddListener(() => DoMethod());

DoMethodは取り付けたい処理を書きます。
Inspectorから追加する場合は引数一つしかできませんが、
スクリプトからだと複数でもいけます。

以下のようにループする場合はno = iのように
一時変数を作って渡す
for (int i = 0; i < max; i++)
{
    int no = i;
    btn[i].onClick.AddListener(() => DoMethod(no));
}

ループのインデックス「i」を渡すと、変数そのものが渡されるので
全てループ終了後のインデックス値になってしまいます。

地味にはまったので記載しておきます。