Unityでコルーチンを使ってクイズRPGの戦闘演出を改善してみた

Unity

現在、UnityでクイズRPGを制作しています。
今日は「正解・不正解の処理」をコルーチンへまとめながら、戦闘演出を追加しました。

正解・不正解処理をコルーチンへ移行

今まではボタンを押した瞬間に

  • ダメージ
  • 次の問題表示

まで一気に処理していました。

そのため、

Correct!

次の問題

と切り替わってしまい、演出を見る時間がありませんでした。

そこで、

public void OnChoiceButton(int choiceIndex)
{
StartCoroutine(AnswerFlow(choiceIndex));
}

コルーチンで演出の流れを制御

現在は次のような流れになっています。

回答

Correct / Wrong表示

敵の攻撃・ダメージ演出

1秒待機

次の問題

yield return new WaitForSeconds(1f);
を使うことで、プレイヤーが演出を確認できるようになりました。

敵のダメージ演出を追加

敵にダメージを与えたとき、

  • スラッシュエフェクト
  • 敵画像の点滅

を追加しました。

enemyAnimationController.slashEffect.Play();
enemyAnimationController.Flash();

以前よりも攻撃している感覚が出てきました。

EnemyAnimationControllerを追加

敵の見た目の制御をまとめるために

EnemyAnimationController

を作成しました。

現在担当している処理は

  • Attack
  • Flash
  • HideEnemy
  • Slash Effect

です。

今後は

  • 待機モーション
  • ダメージモーション
  • 死亡モーション

もここへまとめる予定です。

コルーチンの理解が深まった

今回一番勉強になったのは

yield return StartCoroutine(GameClear());

最初は

StartCoroutine(GameClear());

との違いが分かりませんでした。
理解した内容は次の通りです。

StartCoroutine
ゲームクリア処理を開始するだけ。
今の処理はそのまま続く。

yield return StartCoroutine
ゲームクリア処理が終わるまで待機する。

今日の学び

今日学んだことをまとめると、

  • IEnumerator はコルーチンとして実行できる関数
  • StartCoroutine() はコルーチンを開始する
  • yield return は処理を一時停止し、あとで続きを実行する
  • yield break はコルーチンを終了する

最初は難しかったですが、実際にゲームを作りながら使うことで少しずつ理解できるようになってきました。

コメント