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.