FC2ブログ
    09 «1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

    ハルシオンシステムの気ままBlog

    株式会社ハルシオンシステムのメンバーが送る、UnityやらJavaやらの技術的話題から、自社開発のアプリの宣伝とかとかのブログです。ほんと気ままにいきたいと思います。更新日は毎週 月 木でっす!

     

    【ハルシオンブログ】forのなかでButton.onClick.AddListenerするとき 

    こんにちは。
    大坂です。

    今日も寒いですね!
    関東でも雪になるようです・・・。

    さて今日のブログです。
    forのなかでボタンのonClickのAddlistenerを設定したときのお話。

    とりあえずこんな感じでやるとうまくいきません。
        public Button[] button;

    void Start() {
    for(int i = 0; i < button.Length; i++) {
    button[i].onClick.AddListener(() => ButtonTest(i));
    }
    }

    public void ButtonTest(int index) {
    Debug.Log(index);
    }

    ボタンを4つセットしてループで回してボタンを押すとどのボタンを押してもログに「4」が出てきてしまいますね。


    解決するには一時変数を作って「i」を入れてあげればちゃんと動きます。
    こんな感じ
        public Button[] button;

    void Start() {
    for(int i = 0; i < button.Length; i++) {
    int tmp = i;
    button[i].onClick.AddListener(() => ButtonTest(tmp));
    }
    }

    public void ButtonTest(int index) {
    Debug.Log(index);
    }

    結果

    ちゃんと意図したとおり動いてくれますね!

    ちなみにAddListener はアクションを渡さないといけないみたいなのでこんな感じではコンパイルエラーになります。
        button[i].onClick.AddListener(ButtonTest(i));

    で、ラムダ式にして渡してあげたんですけど、あれ?となったので、同じようなことになったときの参考になればと思います。
    ではまたノシ

    Category: Androidアプリ紹介

    tb 0 : cm 0   

    コメント

    コメントの投稿

    Secret

    トラックバック

    トラックバックURL
    →http://halcyonsystemblog.jp/tb.php/573-f407c3bd
    この記事にトラックバックする(FC2ブログユーザー)