Ефект уповільненого руху в Unity

Змінити темп часу в Unity досить легко, все, що вам потрібно зробити, це змінити значення Time.timeScale.

Time.timeScale — це значення в Unity, яке керує залежними від часу подіями, такими як функції Update, анімація, частинки, фізика тощо. Коли timeScale дорівнює 1, час минає так само швидко, як у реальному часі, з 0,5 час проходить у 2 рази повільніше, ніж у реальному часі, а з 2,0 час проходить у два рази швидше. Time.timeScale зі значенням 0 призупиняє будь-які обчислення, що залежать від частоти кадрів, від’ємні значення ігноруються.

Однак просто встановити значення timeScale недостатньо, щоб створити правдоподібний ефект сповільненої зйомки.

Деякі компоненти, такі як AudioSource, не піддаються впливу часу, але, на щастя, зміни їх висоти достатньо, щоб додати ефект уповільненої зйомки аудіо.

Уповільнена зйомка в іграх означає візуальний, а іноді й функціональний ефект, коли ігровий процес, графіка й анімація сповільнюються, щоб створити драматичний і стилізований досвід. Він використовується, щоб підкреслити ключові моменти, покращити контроль гравця або додати кінематографічний відтінок у ігровий процес.

Коли гра уповільнена, здається, що все рухається зі зниженою швидкістю порівняно зі звичайним процесом гри. Це може включати рухи персонажів, взаємодії з навколишнім середовищем і навіть ефекти снарядів або частинок. Ефект часто досягається шляхом регулювання частоти кадрів гри або маніпулюванням пов’язаних із часом змінних у коді гри.

Щоб створити ефект уповільненої зйомки в грі Unity, нам потрібно буде написати сценарій, який буде змінювати значення Time.timeScale і змінюватиме висоту всіх активних аудіоджерел.

Уповільнений рух є протилежністю швидкого руху і є процесом уповільнення швидкості гри.

  • Створіть новий сценарій, назвіть його 'SC_SlowMotionEffect', видаліть із нього все, а потім вставте в нього наведений нижче код:

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

  • Прикріпіть наведений вище сценарій до будь-якого ігрового об’єкта, а потім натисніть 'Q' у грі, щоб увімкнути/вимкнути ефект уповільненої зйомки.

Щоб переконатися, що Rigidbodies симулюється плавно під час ефекту уповільненого руху, установіть для їх значення Interpolate значення Interpolate або Extrapolate.

Рекомендовані статті
Як налаштувати контролер джойстика для руху в Unity
Найпопулярніші ресурси Unity з Asset Store
Weather Maker - підняття середовища Unity на нову висоту
Сценарій стрільби з гармати на основі Raycast і снарядів для Unity
Zone Controller Pro - пакет Unity Asset Store
Як використовувати нову систему водопостачання HDRP в Unity
FPC Swimmer - всеосяжний ресурс Unity для занурення у воду