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.

Artigos sugeridos
Script de tiro com arma baseado em Raycast e projéteis para Unity
Principais ativos do Unity na Asset Store
Script C# para criar um efeito de trilha de cursor no Unity
FPC Swimmer - Um ativo de unidade abrangente para ambientes aquáticos imersivos
Script de aparência do mouse para Unity
Weather Maker - Elevando ambientes de unidade a novos patamares
Unity Como gerar objetos com um clique do mouse