Slow Motion-effekt i enhet
Å endre tidstempoet i Unity er ganske enkelt, alt du trenger å gjøre er å endre verdien på Time.timeScale.
Time.timeScale er en verdi i Unity som kontrollerer tidsavhengige hendelser, for eksempel Oppdater-funksjoner, animasjoner, partikler, fysikk, osv. Når tidsskalaen er 1, går tiden like fort som sanntid, med 0,5 går tiden 2 ganger langsommere enn sanntid, og med 2,0 går tiden dobbelt så fort. Time.timeScale med verdien 0 stopper alle framerate-avhengige beregninger, negative verdier ignoreres.
Det er imidlertid ikke nok å sette verdien på timeScale for å lage en troverdig saktefilm-effekt.
Noen komponenter som AudioSource påvirkes ikke av tid, men heldigvis er det nok å endre tonehøyden til å legge til en saktefilm-effekt til lyden.
Sakte film i spill refererer til en visuell og noen ganger funksjonell effekt der spillingen, grafikken og animasjonene bremses ned for å skape en dramatisk og stilisert opplevelse. Den brukes til å fremheve nøkkeløyeblikk, forbedre spillerkontroll eller legge til filmisk stil til spillsekvenser.
Når spillet er i sakte film, ser alt ut til å bevege seg med redusert hastighet sammenlignet med vanlig spilling. Dette kan inkludere karakterbevegelser, miljøinteraksjoner og til og med prosjektil- eller partikkeleffekter. Effekten oppnås ofte ved å justere spillets bildefrekvens eller ved å manipulere tidsrelaterte variabler i spillets kode.
For å lage en saktefilm-effekt i Unity-spillet, må vi skrive et skript som vil endre verdien til Time.timeScale og endre tonehøyden til alle aktive Lydkilder.
Sakte film er det motsatte av rask film og er prosessen med å redusere hastigheten på spillet.
- Lag et nytt skript, kall det 'SC_SlowMotionEffect', fjern alt fra det og lim inn koden nedenfor i det:
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;
}
}
}
}
- Fest skriptet ovenfor til et hvilket som helst GameObject, og trykk deretter på 'Q' i spillet for å aktivere/deaktivere slow-motion-effekten.
For å sikre at Stive kropper simuleres jevnt under saktebevegelseseffekten, setter du deres Interpolate-verdi til Interpolate eller Extrapolate.