Эффект замедленного движения в 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
Как использовать новую систему водоснабжения HDRP в Unity
FPC Swimmer — комплексный ресурс Unity для погружения в водную среду