Effetto al rallentatore nell'unità

Modificare il ritmo temporale in Unity è abbastanza semplice, tutto ciò che devi fare è modificare il valore di Time.timeScale.

Time.timeScale è un valore in Unity che controlla gli eventi dipendenti dal tempo, come Aggiorna funzioni, animazioni, particelle, fisica, ecc. Quando timeScale è 1, il tempo passa più velocemente del tempo reale, con 0.5 il tempo passa 2 volte più lentamente del tempo reale e con 2.0 il tempo passa due volte più velocemente. Time.timeScale con il valore 0 mette in pausa tutti i calcoli dipendenti dal framerate, i valori negativi vengono ignorati.

Tuttavia, la semplice impostazione del valore di timeScale non è sufficiente per creare un effetto rallentatore credibile.

Alcuni componenti come AudioSource non sono influenzati dal tempo, ma fortunatamente, cambiare il loro tono è sufficiente per aggiungere un effetto al rallentatore all'audio.

Il rallentatore nei giochi si riferisce a un effetto visivo e talvolta funzionale in cui il gameplay, la grafica e le animazioni vengono rallentati per creare un'esperienza drammatica e stilizzata. Viene utilizzato per enfatizzare i momenti chiave, migliorare il controllo del giocatore o aggiungere un tocco cinematografico alle sequenze di gioco.

Quando il gioco è al rallentatore, tutto sembra muoversi a una velocità ridotta rispetto al normale gameplay. Ciò può includere movimenti dei personaggi, interazioni ambientali e persino effetti di proiettili o particelle. L'effetto si ottiene spesso regolando la frequenza dei fotogrammi del gioco o manipolando le variabili relative al tempo nel codice del gioco.

Per creare un effetto rallentatore nel gioco Unity, dovremo scrivere uno script che cambierà il valore di Time.timeScale e lo farà cambiare il tono di tutte le sorgenti audio attive.

Il rallentatore è l'opposto del movimento veloce ed è il processo di rallentamento della velocità del gioco.

  • Crea un nuovo script, chiamalo 'SC_SlowMotionEffect', rimuovi tutto da esso quindi incolla il codice sottostante al suo interno:

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;
            }
        }
    }
}

  • Allega lo script sopra a qualsiasi GameObject, quindi premi 'Q' nel gioco per attivare/disattivare l'effetto rallentatore.

Per assicurarti che i Corpi rigidi vengano simulati senza problemi durante l'effetto rallentatore, imposta il loro valore di Interpolazione su Interpolazione o Estrapolazione.