Efeito de câmera lenta no Unity
Alterar o ritmo de tempo em Unity é bastante fácil, basta alterar o valor de Time.timeScale.
Time.timeScale é um valor em Unity que controla eventos dependentes de tempo, como Atualizar funções, animações, partículas, física, etc. Quando o timeScale é 1, o tempo passa tão rápido quanto o tempo real, com 0,5 o tempo passa 2 vezes mais lento que o tempo real e com 2,0 o tempo passa duas vezes mais rápido. Time.timeScale com o valor 0 pausa qualquer cálculo dependente da taxa de quadros, valores negativos são ignorados.
No entanto, apenas definir o valor de timeScale não é suficiente para criar um efeito de câmera lenta crível.
Alguns componentes como AudioSource não são afetados pelo tempo, mas, felizmente, mudar seu tom é suficiente para adicionar um efeito de câmera lenta ao áudio.
A câmera lenta nos jogos refere-se a um efeito visual e às vezes funcional em que a jogabilidade, os gráficos e as animações são desacelerados para criar uma experiência dramática e estilizada. É usado para enfatizar momentos-chave, melhorar o controle do jogador ou adicionar um toque cinematográfico às sequências de jogo.
Quando o jogo está em câmera lenta, tudo parece se mover em uma velocidade reduzida em comparação com o jogo normal. Isso pode incluir movimentos de personagens, interações ambientais e até mesmo efeitos de projéteis ou partículas. O efeito geralmente é obtido ajustando a taxa de quadros do jogo ou manipulando variáveis relacionadas ao tempo no código do jogo.
Para fazer um efeito de câmera lenta no jogo Unity, precisaremos escrever um script que altere o valor de Time.timeScale e alterar o tom de todas as fontes de áudio ativas.
A câmera lenta é o oposto da câmera rápida e é o processo de diminuir a velocidade do jogo.
- Crie um novo script, chame-o de 'SC_SlowMotionEffect', remova tudo dele e cole o código abaixo dentro dele:
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;
}
}
}
}
- Anexe o script acima a qualquer GameObject e pressione 'Q' no jogo para ativar/desativar o efeito de câmera lenta.
Para garantir que Rigidbodies sejam simulados suavemente durante o efeito de câmera lenta, defina o valor de Interpolação como Interpolar ou Extrapolar.