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