Slow motion-effect in eenheid

Het wijzigen van het tijdtempo in Unity is vrij eenvoudig. Het enige wat u hoeft te doen is de waarde van Time.timeScale te wijzigen.

Time.timeScale is een waarde in Unity die tijdsafhankelijke gebeurtenissen bestuurt, zoals Update functies, animaties, deeltjes, natuurkunde, enz. Als de tijdschaal 1 is, verstrijkt de tijd net zo snel als in realtime, bij 0,5 verstrijkt de tijd 2 keer langzamer dan in realtime, en bij 2,0 verstrijkt de tijd twee keer zo snel. Time.timeScale met de waarde 0 pauzeert alle framerate-afhankelijke berekeningen, negatieve waarden worden genegeerd.

Het alleen instellen van de waarde van timeScale is echter niet voldoende om een ​​geloofwaardig slow-motioneffect te creëren.

Sommige componenten, zoals AudioSource, worden niet beïnvloed door de tijd, maar gelukkig is het veranderen van de toonhoogte voldoende om een ​​slow-motion-effect aan de audio toe te voegen.

Slow motion in games verwijst naar een visueel en soms functioneel effect waarbij de gameplay, graphics en animaties worden vertraagd om een ​​dramatische en gestileerde ervaring te creëren. Het wordt gebruikt om belangrijke momenten te benadrukken, de controle over de speler te verbeteren of filmische flair aan gameplay-sequenties toe te voegen.

Wanneer het spel in slow motion is, lijkt alles met een lagere snelheid te bewegen vergeleken met normale gameplay. Dit kunnen karakterbewegingen, omgevingsinteracties en zelfs projectiel- of deeltjeseffecten omvatten. Het effect wordt vaak bereikt door de framesnelheid van het spel aan te passen of door tijdgerelateerde variabelen in de spelcode te manipuleren.

Om een ​​slow-motion-effect te creëren in het spel Unity, moeten we een script schrijven dat de waarde van Time.timeScale verandert en de toonhoogte van alle actieve Audiobronnen.

Slow motion is het tegenovergestelde van fast motion en is het proces waarbij de spelsnelheid wordt vertraagd.

  • Maak een nieuw script, noem het 'SC_SlowMotionEffect', verwijder alles eruit en plak de onderstaande code erin:

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

  • Voeg het bovenstaande script toe aan een GameObject en druk vervolgens in het spel op 'Q' om het slow-motion-effect te activeren/deactiveren.

Om ervoor te zorgen dat Rigidbodies soepel worden gesimuleerd tijdens het slow-motioneffect, stelt u hun Interpolatiewaarde in op Interpoleren of Extrapoleren.

Voorgestelde artikelen
Hoe u het nieuwe HDRP-watersysteem in eenheid kunt gebruiken
Script voor het maken van een lichtschakelaar in eenheid
Joystickcontroller instellen voor beweging in eenheid
Eenheid FPS-teller
2D-munten verzamelen in eenheid
Doelindicator in eenheid
Deurscripts voor eenheid