Unity のスローモーション効果

Unity の時間ペースを変更するのは非常に簡単で、Time.timeScale の値を変更するだけです。

Time.timeScale は、Update 関数、アニメーション、パーティクル、物理学などの時間依存イベントを制御する Unity の値です。timeScale が 1 の場合、時間が経過します。リアルタイムと同じくらい速く、0.5 では時間の経過がリアルタイムより 2 倍遅くなり、2.0 では時間の経過が 2 倍の速さになります。Time.timeScale の値を 0 にすると、フレームレートに依存する計算が一時停止され、負の値は無視されます。

ただし、timeScale の値を設定するだけでは、信頼できるスローモーション効果を作成するのに十分ではありません。

AudioSource などの一部のコンポーネントは時間の影響を受けませんが、幸いなことに、オーディオにスローモーション効果を追加するには、ピッチを変更するだけで十分です。

ゲームにおけるスローモーションとは、劇的な様式化されたエクスペリエンスを生み出すために、ゲームプレイ、グラフィックス、アニメーションの速度を落とす、視覚的、場合によっては機能的な効果を指します。重要な瞬間を強調したり、プレイヤーのコントロールを改善したり、ゲームプレイ シーケンスに映画のような雰囲気を加えたりするために使用されます。

ゲームがスローモーションになると、通常のゲームプレイに比べてすべての動きが遅くなったように見えます。これには、キャラクターの動き、環境の相互作用、さらには発射物やパーティクルの効果も含まれる場合があります。この効果は、多くの場合、ゲームのフレーム レートを調整するか、ゲーム コード内の時間関連の変数を操作することによって実現されます。

Unity ゲームでスローモーション効果を作成するには、Time.timeScale の値を変更し、すべてのアクティブなオーディオ ソースのピッチを変更するスクリプトを作成する必要があります。

スローモーションはファストモーションの逆で、ゲーム速度を遅くするプロセスです。

  • という新しいスクリプトを作成し、'SC_SlowMotionEffect' という名前を付け、そこからすべてを削除して、その中に以下のコードを貼り付けます。

SC_SlowMotionEffect.cs

using UnityEngine;

public class SC_SlowMotionEffect : MonoBehaviour
{
    public float slowMotionTimeScale = 0.5f;
    public bool slowMotionEnabled = false;

    [System.Serializable]
    public class AudioSourceData
    {
        public AudioSource audioSource;
        public float defaultPitch;
    }

    AudioSourceData[] audioSources;

    // Start is called before the first frame update
    void Start()
    {
        //Find all AudioSources in the Scene and save their default pitch values
        AudioSource[] audios = FindObjectsOfType<AudioSource>();
        audioSources = new AudioSourceData[audios.Length];

        for (int i = 0; i < audios.Length; i++)
        {
            AudioSourceData tmpData = new AudioSourceData();
            tmpData.audioSource = audios[i];
            tmpData.defaultPitch = audios[i].pitch;
            audioSources[i] = tmpData;
        }

        SlowMotionEffect(slowMotionEnabled);
    }

    // Update is called once per frame
    void Update()
    {
        //Activate/Deactivate slow motion on key press
        if (Input.GetKeyDown(KeyCode.Q))
        {
            slowMotionEnabled = !slowMotionEnabled;
            SlowMotionEffect(slowMotionEnabled);
        }
    }

    void SlowMotionEffect(bool enabled)
    {
        Time.timeScale = enabled ? slowMotionTimeScale : 1;
        for (int i = 0; i < audioSources.Length; i++)
        {
            if (audioSources[i].audioSource)
            {
                audioSources[i].audioSource.pitch = audioSources[i].defaultPitch * Time.timeScale;
            }
        }
    }
}

  • 上記のスクリプトを 任意のゲームオブジェクトにアタッチし、ゲーム内で 'Q' を押してスローモーション効果を有効/無効にします。

スローモーション効果中に Rigidbody がスムーズにシミュレートされるようにするには、補間値を補間または外挿に設定します。

おすすめの記事
ゾーン コントローラー プロ - Unity アセット ストア パッケージ
Unity で新しい HDRP 給水システムを使用する方法
FPC Swimmer - 没入型水環境向けの包括的な Unity アセット
Ultimate Spawner 2.0 - 革新的な資産
Unity 用のマウスの外観スクリプト
Weather Maker - Unity 環境を新たな高みに引き上げる
Unity で Xbox コントローラーを使用する方法