攻撃のインパクトを強調させる演出としてヒットストップがありますよね
今回はそんなヒットストップの実装方法を紹介していきます!
2Dで作って行きますが3Dでもできる手法なので是非活用してみてください!
準備
今回は弾が敵に当たったらヒットストップを発動する形式にします
リジッドボディとコライダーのついている弾を撃つプレイヤーを用意します
そしてリッドボディーのついている敵を用意します
これで準備完了です!
スクリプト
それでは新しく「HitStop」というスクリプトを作ってプログラムを組んでいきましょう
内容は以下の通り↓
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HitStop : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D other)
{
//敵に当たったらヒットストップ
if (other.gameObject.CompareTag("Enemy"))
{
StartCoroutine(DoHitStop(.3f));
}
}
//ヒットストップ
IEnumerator DoHitStop(float duration)
{
Time.timeScale = 0f;
yield return new WaitForSecondsRealtime(duration);
Time.timeScale = 1.0f;
}
}
とてもシンプルですね!
敵に当たったら、ゲーム内処理時間を「timeScale」で0にし、引数に入れたヒットストップの時間になったらまた「timeScale」を1に戻しているだけです
ここで注意してほしいのがこの部分↓
yield return new WaitForSecondsRealtime(duration);
これをただの WaitForSecondsにしてしまうとゲーム内時間での計測になってしまい、「timeScale」を0にした影響でずっと止まった状態になってしまいます
WaitForSecondsRealtimeにすれば現実時間で計測しているので「timeScale」の影響を受けません
実行結果
それでは作ったスクリプトを弾にアタッチして実行してみましょう!
ヒットストップの完成です!
これをパーティクルやカメラシェイクなどの演出と組み合わせる爽快感を感じること間違いなしです!