Slow Motion-effekt i enhet

Att ändra tidstakten i Unity är ganska enkelt, allt du behöver göra är att ändra värdet på Time.timeScale.

Time.timeScale är ett värde i Unity som styr tidsberoende händelser, såsom Uppdatera-funktioner, animationer, partiklar, fysik, etc. När tidsskalan är 1 går tiden lika fort som i realtid, med 0,5 går tiden 2 gånger långsammare än i realtid, och med 2,0 går tiden dubbelt så snabbt. Time.timeScale med värdet 0 pausar alla ramhastighetsberoende beräkningar, negativa värden ignoreras.

Det räcker dock inte att bara ställa in värdet på timeScale för att skapa en trovärdig slowmotion-effekt.

Vissa komponenter som Ljudkälla påverkas inte av tiden, men som tur är räcker det att ändra deras tonhöjd för att lägga till en slowmotion-effekt till ljudet.

Slow motion i spel hänvisar till en visuell och ibland funktionell effekt där spelet, grafiken och animationerna saktas ner för att skapa en dramatisk och stiliserad upplevelse. Den används för att betona viktiga ögonblick, förbättra spelarkontroll eller lägga till filmisk stil till spelsekvenser.

När spelet är i slow motion verkar allt röra sig i en lägre hastighet jämfört med normalt spelande. Detta kan inkludera karaktärsrörelser, miljöinteraktioner och till och med projektil- eller partikeleffekter. Effekten uppnås ofta genom att justera spelets bildfrekvens eller genom att manipulera tidsrelaterade variabler i spelets kod.

För att skapa en slowmotion-effekt i Unity-spelet måste vi skriva ett skript som kommer att ändra värdet på Time.timeScale och ändra tonhöjden för alla aktiva Ljudkällor.

Slow motion är motsatsen till snabb rörelse och är processen att sakta ner spelets hastighet.

  • Skapa ett nytt skript, kalla det 'SC_SlowMotionEffect', ta bort allt från det och klistra in koden nedan 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;
            }
        }
    }
}

  • Bifoga skriptet ovan till valfritt GameObject och tryck sedan på 'Q' i spelet för att aktivera/avaktivera slowmotion-effekten.

För att se till att Styva kroppar simuleras smidigt under slowmotion-effekten, ställ in deras Interpolate-värde på Interpolate eller Extrapolate.

Föreslagna artiklar
2D-myntsamling i enhet
RTS-stil enhetsval för enhet
Målindikator i enhet
Zone Controller Pro - Unity Asset Store-paket
Hur man använder nytt HDRP-vattensystem i Unity
FPC Swimmer - En omfattande enhetstillgång för uppslukande vattenmiljöer
Ultimate Spawner 2.0 - En tillgång som förändrar spelet