Efekt zwolnionego tempa w jedności

Zmiana tempa czasu w Unity jest całkiem prosta, wystarczy zmienić wartość Time.timeScale.

Time.timeScale to wartość w Unity, która kontroluje zdarzenia zależne od czasu, takie jak funkcje Update, animacje, cząstki, fizyka itp. Gdy timeScale wynosi 1, czas mija tak szybko, jak w czasie rzeczywistym, przy 0,5 czas płynie 2 razy wolniej niż w czasie rzeczywistym, a przy 2,0 czas płynie dwa razy szybciej. Time.timeScale o wartości 0 wstrzymuje wszelkie obliczenia zależne od liczby klatek na sekundę, wartości ujemne są ignorowane.

Jednak samo ustawienie wartości timeScale nie wystarczy, aby uzyskać wiarygodny efekt zwolnionego tempa.

Na niektóre komponenty, takie jak AudioSource, nie ma wpływu czas, ale na szczęście zmiana ich wysokości wystarczy, aby dodać do dźwięku efekt zwolnionego tempa.

Slow motion w grach odnosi się do efektu wizualnego, a czasami funkcjonalnego, podczas którego rozgrywka, grafika i animacje są spowalniane, aby stworzyć dramatyczne i stylizowane wrażenia. Służy do podkreślania kluczowych momentów, poprawy kontroli gracza lub dodawania kinowego charakteru sekwencjom rozgrywki.

Kiedy gra toczy się w zwolnionym tempie, wszystko wydaje się poruszać ze zmniejszoną prędkością w porównaniu do normalnej rozgrywki. Może to obejmować ruchy postaci, interakcje ze środowiskiem, a nawet efekty pocisków lub cząstek. Efekt ten często osiąga się dostosowując liczbę klatek na sekundę w grze lub manipulując zmiennymi związanymi z czasem w kodzie gry.

Aby uzyskać efekt spowolnienia w grze Unity będziemy musieli napisać skrypt, który zmieni wartość Time.timeScale i zmieni wysokość wszystkich aktywnych źródeł audio.

Slow motion jest przeciwieństwem szybkiego ruchu i polega na spowalnianiu szybkości gry.

  • Utwórz nowy skrypt, nazwij go 'SC_SlowMotionEffect', usuń z niego wszystko, a następnie wklej do niego poniższy kod:

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

  • Dołącz powyższy skrypt do dowolnego obiektu GameObject, a następnie naciśnij 'Q' w grze, aby włączyć/wyłączyć efekt zwolnionego tempa.

Aby mieć pewność, że Rigidbodies będą symulowane płynnie podczas efektu zwolnionego tempa, ustaw ich wartość Interpolacja na Interpolacja lub Ekstrapolacja.

Sugerowane artykuły
Weather Maker — wznosi środowiska jedności na nowy poziom
Skrypt strzelania z broni palnej opartej na promieniach i pociskach dla Unity
Jak skonfigurować kontroler joysticka do poruszania się w jedności
Najlepsze zasoby Unity ze sklepu z zasobami
Skrypty drzwi dla jedności
Zone Controller Pro — pakiet Unity Asset Store
Jak korzystać z nowego systemu wodnego HDRP w Unity