どうもUSUです。今回は一度だけ実行したい場合のスクリプトの書き方についてです。

Updateの中で一度だけ実行したい場合や繰り返し文に組み込む場合など使えるとかなり便利な方法です。

シチュエーション例

ボタンを押したらListに入ってるnameのデータをすべてNameTextに表示したい


    public void Button_Push() //ボタンを押したら実行
    {
        foreach (List terasu in terasulist)//List内のnameをdataに繰り返し取り出す
          {
          data = data + terasu.name + "\n";
          }
         NameText.GetComponent<Text>().text = data; 
      //dataに入ってる文字をNameTextに表示する
    }

   public class List //配列のリスト
    {
        public string id { get; set; }
        public string name { get; set; }
    }

こんな場合。ボタンを押すと改行されたname一覧がNameTextに表示されるので、一見これで完成!と言いたくなりますがボタンを連打すると押した分だけテキストが末尾に大量生産… 

ボタンの関数にほかの命令を組み合わせれば問題ないかもしれませんが、これでは困ります。

慣れている方からすればもっといい書き方があるかもしれませんが…

 

解決法

private bool OneTime = true;//一度だけ実行用

public void Button_Push() //ボタンを押したら実行
    {
    if(OneTime == true)//もしtrueなら実行
       {
           foreach (List terasu in terasulist)//List内のnameをdataに繰り返し取り出す
            {
             data = data + terasu.name + "\n";
            }
            NameText.GetComponent<Text>().text = data; 
        //dataに入ってる文字をNameTextに表示する
            OneTime = false;//実行されたらfalseにする
       }
    }

   public class List //配列のリスト
    {
        public string id { get; set; }
        public string name { get; set; }
    }

このようにBool型の判定用の変数を作りtrueの時だけ実行するようにします。

実行したい文をカッコ内に入れてあげればオッケーです。 カッコ内の最後でOneTimeをfalseにすることを忘れないように…

NameText.GetComponent<Text>().text = data; の部分だけをif文で括ることでも可能ですがボタンを押すたびに内部でforeachが実行されまくるのも嫌なのでこう書いてみました。

ほかにも備忘録を書いていく予定ですのでぜひ読んでみてください!

誰かの助けになればと思います。

おすすめ: