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.