待ちアニメのスキップ処理

アニメを作る方法はいくつかありますが、ここではコルーチンを使った方法を想定しています。コルーチンは逐次的に進んでいく処理を作ることが簡単なので、アニメーションを実装するには便利な方法です。無限ループを持つことで毎フレーム処理することも可能です。

アニメを作った後でスキップしたいということがあると思います。特に頑張って作ったアニメは時間がかかりがちなので、ゲームのテンポを悪くしてしまいます。画面をタップしたり、タッチしている間はアニメをスキップするといったことを望まれることでしょう。
スキップ処理はかなり面倒なことが多いです。本来処理すべき内容を行わないのですから当然です。
処理を先に行い、表示だけを変化させるアニメを作る設計がふつうかと思います。アニメする状態とアニメが終わったときの状態を作り、最後にはアニメが終わったときの状態を通るように設計すれば、スキップの実装はそれほど難しくはありません。アニメ状態中に強制的にアニメが終わった状態に遷移させれば、スキップになります。
単純なアニメはそれで可能ですが、色々絡み合ってしまうと非常に難しくなります。

最も単純なアニメーションは待つことです。表示して、少し待つということを繰り返すだけでも躍動感は出ます。結果表示とかでよくあるものです。
これを簡単に作るにはWaitForSecondsを使います。

上のコードでは、WaitForSecondsを呼び出し1.0秒待機しています。表示するというコメントのところに何らかの処理を書けば良いわけです。

WaitForSecondsを呼び出すと処理が止められてしまうので、これではスキップができません。スキップを行うには入力の受付が必要なので、毎回処理するところが必要なのです。

スキップを行えるよう入力を受け付けるコルーチンを書いてみました。

コルーチンの中で新たなコルーチンを呼び出すということをしています。yield returnにStartCoroutineを渡すと、渡したコルーチンが終わるまで処理が遅延されます。SkippableWaitがスキップが行える「待ち」の処理です。WaitForSecondsと同じように使えるので、使いやすいと思います。