【Unity】コルーチンを使ってヒットストップを実装しよう

はじめに

ヒットストップとは、敵が攻撃を受けたときに少しの間時間を止めることを指します。この時間停止は、攻撃のヒット感やアクションの迫力を高め、プレイヤーが自分の行動による影響を感じるのを助ける役割を果たします。

ゲームをやったことある方なら、感じたことがある人も多そうです!

ヒットストップの効果

ヒットストップはゲームプレイにさまざまな効果をもたらします。

ヒットストップの効果

  • 攻撃が命中したことを明確にプレイヤーに伝えられる
  • アクションの迫力を上げる効果が表現できる

攻撃の当たり判定があたった瞬間にゲームが微小な停止することで、プレイヤーは攻撃の成功を目で確認し、満足感を得ることができます。

また、ヒットストップはアクションの迫力を向上させる効果もあります。例えば、高速で連続的な攻撃を繰り出すアクションシーンにおいて、ヒットストップを挿入することで、各攻撃の瞬間を際立たせ、プレイヤーにより大きなインパクトを与えることが可能です。

次に、Unityコルーチンを使用してヒットストップを実装する手法について詳しく見ていきましょう。

ヒットストップの実装方法

コルーチンについて

コルーチンの基本的な使い方はこちらをご覧ください。

実装方法

コルーチンを使ったヒットストップの実装は、以下の手順で行います。

実装手順

  1. どこからでも呼び出せるようにシングルトンにしてコルーチンを作成
  2. ヒットストップさせたいところで呼び出す

以下のコードでは、HitStopManager クラスがヒットストップを制御するコルーチンを持ち、他のスクリプトから呼び出すことでヒットストップを開始します。ヒットストップが終了した後に、元のタイムスケールに戻すことで、ゲームプレイを再開します。

using UnityEngine;
using System.Collections;

public class HitStopManager : MonoBehaviour
{
    // どこからでも呼び出せるようにする
    public static HitStopManager instance;

    private void Start()
    {
        instance = this;
    }

    // ヒットストップを開始する関数
    public void StartHitStop(float duration)
    {
        instance.StartCoroutine(instance.HitStopCoroutine(duration));
    }

    // コルーチンの内容
    private IEnumerator HitStopCoroutine(float duration)
    {
        // ヒットストップの開始
        Time.timeScale = 0f;

        // 指定した時間だけ停止
        yield return new WaitForSecondsRealtime(duration);

        // ヒットストップの終了
        Time.timeScale = 1f;
    }
}

ヒットストップを呼び出したいところで、以下のコードを挿入します。以下は1秒止める例です。時間は適宜調整してください。

// ヒットストップ処理挿入 1秒止めてみる
HitStopManager.instance.StartHitStop(1.0f);

実際のプロジェクトに実装してみた

今回は、以下のUnity公式が提供している2Dアクションゲームに実装してみます。

Platformer Microgame | Templates | Unity Asset Store
Use the Platformer Microgame from Unity Technologies for your next project. Find this & other useful Templates on the Unity Asset Store.

デモシーンをプレイした時の様子です。敵を踏んだ時にヒットストップはかかっていません。

まずは、先ほどのHitStopManagerスクリプトを作成して、新しく作成した空のオブジェクトにアタッチします。

敵を踏んだ時にヒットストップを発生させたいので、衝突判定をしているスクリプトを探してみました。EnemyController.csに、プレイヤーとの衝突判定している場所がありましたので、そこにヒットストップ処理を加えました。

実行してみると、ヒットストップが発生するようになりました!

ヒットストップはゲームプレイをより迫力のあるものにする効果的な手段ですが、使いすぎたり、停止時間が長すぎたりするとゲームテンポが悪くなったり、強調されなくなってしまうので、ほどほどにしましょう。

ヒットストップの応用

時間を止める以外にも、以下のような要素を組み合わせると、さらにクオリティがアップします。

  1. スローモーションヒットストップ: 攻撃が当たった瞬間に時間がスローになるヒットストップは、瞬間の美しさを際立たせます。
  2. エフェクトと組み合わせる: ヒットストップ中にエフェクトやパーティクルを挿入することで、攻撃の威力やエネルギー感を視覚的に強調できます。
  3. カメラの視点切り替え: ヒットストップ時にカメラの視点を変えることで、攻撃の成功感をリアルに感じさせることができます。
  4. 背景の変化と結びつける: ヒットストップを利用して背景を暗くしたり、背景の変化と結びつけることで、さらに強調できます。

おわりに

ヒットストップの実装方法の紹介でした!

ヒットストップは、ゲームプレイをより没入感あるものにし、アクションや攻撃のインパクトを強化するための効果的な手法です。ぜひ取り入れてみましょう!

タイトルとURLをコピーしました