Unity 中的慢动作效果
更改 Unity 中的时间节奏非常简单,您所需要做的就是更改 Time.timeScale 的值。
Time.timeScale是Unity中的一个值,控制与时间相关的事件,例如Update函数、动画、粒子、物理等。当timeScale为1时,时间流逝与实时一样快,0.5 时间流逝比实时慢 2 倍,2.0 时间流逝快两倍。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'来激活/停用慢动作效果。
为了确保 Rigidbodies 在慢动作效果期间顺利模拟,请将其插值值设置为插值或外插。