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 がスムーズにシミュレートされるようにするには、補間値を補間または外挿に設定します。