LemonteaのUnity部屋

LemonteaのUnity部屋

UnityとかC#のおはなしです~

Unity Coroutineでタップ待ち処理 会話やリザルトなど

youtu.be


こんにちは。レモンティーです。

ゲームを作っていると、タップ待ちしたいことがあると思います。

いままで、Update内でInput.AnyKeyDownの条件分岐をしたり、
EventTriggerで判定して、何回目のタップかで条件分岐したり
していました。

私は詳しくないのでこれらの方法の是非はわかりかねますが、
条件分岐をかくのが面倒なのは確かです。

そこで、今回は試しにコルーチンを使ってみようとおもいます。

コルーチンについては以前、↓でとりあげました。

sawalemounity.hatenablog.com


このときはWaitForSecondsを使いましたが、今回は
WaitUntilとWaitWhileを使います。

おさらいですが、WaitForSeconds(n)では、n秒間待機しました。
これと同じように、

WaitUntil(X)は、bool型の関数Xがtrueを返すまで待機

WaitWhile(X)は、bool型の関数Xがtrueを返している間待機(falseを返すまで待機)

というものです。


これらでタップ待ちを書いてみます

 public Text Test;
    void Start()
    {
        StartCoroutine(SampleCoroutine());
    }
    IEnumerator SampleCoroutine()
    {
        Test.text = "メロスは激怒した";
        yield return new WaitUntil(Touch);
        yield return new WaitWhile(Touch);
        Test.text = "必ず、かの邪知暴虐の王を" + "\n" + "除かねばならぬと決意した。";
        yield return new WaitUntil(Touch);
        yield return new WaitWhile(Touch);
        Test.text = "メロスには政治がわからぬ";
        yield return new WaitUntil(Touch);
        yield return new WaitWhile(Touch);
        Test.text = "笛を吹き、" + "\n" + "羊と遊んで暮らしてきた";
    }
    bool Touch()
    {
        return Input.anyKeyDown;
    }

なんか同じ処理が並んでて変なかんじですが一応動きます。
同じ処理を並ばせたくない場合はコチラ↓。
ただ、今回のように台詞が4つ程度ならかえって効率悪そうです。
sawalemounity.hatenablog.com

また、一見WaitWhileはいらないように見えますが、
WaitUntilだけだと一気に全ての条件をクリアして最後までいってしまうので、
いったんTouchがfalseになるまで待っています。

一回だけタップ待ちするならいらないです。

いままでコルーチンは使ってなかったので
これからは使ってみたいと思います。

こんかいはここまでです。



関連

sawalemounity.hatenablog.com
sawalemounity.hatenablog.com