onClick
ボタンにメソッドを追加するとき、関数の引数は常にconst = array of buttons.length + 1
です。どこで私は間違えましたか?C#Unity onClickイベントの関数の間違った引数
all_buttons
空ではありません。私は3つの異なるボタンをクリックした。 ユニティログスクリーンショット:link
Button[] all_buttons = GetComponentsInChildren<Button>();
for (int i = 0; i < all_buttons.Length; i++) {
Debug.LogWarning(all_buttons[i]+" => addLoad with index "+ (m_LvlStartIndex + i));
if (levelScript)
all_buttons[i].onClick.AddListener(() => Load(m_LvlStartIndex+i));
}
public void Load(int level) {
Debug.LogWarning("Loading "+level+" level...");
Application.LoadLevel(level);
}
アップデート:すべての 変更この
all_buttons[i].onClick.AddListener(() => Load(m_LvlStartIndex+i));
int tempI = i;
all_buttons[i].onClick.AddListener(() => Load(m_LvlStartIndex+tempI));
のおかげ!
すべてのイベントハンドラでパラメータとして 'm_LvlStartIndex + i'を渡します。これらのハンドラが実際に呼び出される時までに、 'i'は' all_buttons.Length'に等しくなります。したがって、 'm_LvlStartIndex'が1に等しい場合、パラメータはあなたが得ているものとまったく同じになります。 – Abion47
@ Abion47どうしてやってもどうですか? forループが終了した後に 'i'がなくなったので、エラーが発生すると思いますか? – turnipinrut
可能な複製:http://stackoverflow.com/questions/40156493/c-sharp-anonymous-function-scope-in-unity3d/40157738#40157738 – Hellium