Efect de mișcare lentă în Unity

Modificarea ritmului de timp în Unity este destul de ușoară, tot ce trebuie să faceți este să schimbați valoarea Time.timeScale.

Time.timeScale este o valoare din Unity care controlează evenimente dependente de timp, cum ar fi funcțiile Update, animații, particule, fizică etc. Când timeScale este 1, timpul trece la fel de rapid ca în timp real, cu 0,5 timpul trece de 2 ori mai lent decât în ​​timp real, iar cu 2,0 timpul trece de două ori mai repede. Time.timeScale cu valoarea 0 întrerupe orice calcul dependent de framerate, valorile negative sunt ignorate.

Cu toate acestea, doar setarea valorii TimeScale nu este suficientă pentru a crea un efect credibil de încetinire.

Unele componente precum AudioSource nu sunt afectate de timp, dar, din fericire, modificarea înălțimii lor este suficientă pentru a adăuga un efect de încetinire a sunetului.

Mișcarea lentă în jocuri se referă la un efect vizual și uneori funcțional în care jocul, grafica și animațiile sunt încetinite pentru a crea o experiență dramatică și stilizată. Este folosit pentru a sublinia momentele cheie, pentru a îmbunătăți controlul jucătorului sau pentru a adăuga fler cinematografic secvențelor de joc.

Când jocul este în mișcare lentă, totul pare să se miște cu o viteză redusă în comparație cu jocul normal. Aceasta poate include mișcări ale personajelor, interacțiuni cu mediul și chiar efecte de proiectile sau particule. Efectul este adesea obținut prin ajustarea ratei de cadre a jocului sau prin manipularea variabilelor legate de timp din codul jocului.

Pentru a face un efect de încetinire în jocul Unity, va trebui să scriem un script care va schimba valoarea Time.timeScale și va schimba înălțimea tuturor surselor audio active.

Mișcarea lentă este opusul mișcării rapide și este procesul de încetinire a vitezei de joc.

  • Creați un nou script, numiți-l 'SC_SlowMotionEffect', eliminați totul din el, apoi inserați codul de mai jos în interiorul lui:

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

  • Atașați scriptul de mai sus la orice GameObject apoi apăsați 'Q' în joc pentru a activa/dezactiva efectul de încetinire.

Pentru a vă asigura că Rigidbodies sunt simulate fără probleme în timpul efectului de încetinire, setați valoarea lor de Interpolare la Interpolare sau Extrapolare.

Articole sugerate
Cum să configurați controlerul cu joystick pentru mișcare în Unity
Cele mai bune active Unity din Magazinul de active
Script C# pentru crearea unui efect de traseu al cursorului în Unity
Cum să utilizați noul sistem de apă HDRP în Unity
FPC Swimmer - Un activ unitar cuprinzător pentru medii de apă imersive
Weather Maker - Ridicarea mediului Unity la noi înălțimi
Cum să utilizați controlerul Xbox în Unity