Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Все Гайды Мой Кабинет

Создаём эффект замедления времени

Приветствую! Сегодня мы научимся управлять нашим временем. А если быть более точным, то замедлять его при нажатии на кнопку.

На самом деле, эффект замедления времени создаётся легче, чем Вы можете себе это представить. В Юнити существует класс Time, и его свойство timeScale, в котором хранится информация о скорости движения времени. По умолчанию это значение равняется единице, и чтобы создать эффект замедления времени, нам необходимо это значение изменять при определённых условиях.

Давайте же сделаем это. Но для начала создадим c# скрипт с названием SlowTime. Данный скрипт присвойте любому объекту, например вашему главному персонажу. Впишем в него следующий код:

using UnityEngine;

public class SlowTime : MonoBehaviour
{
    public float slowPower = 0.5f;

    void Update()
    {
        if (Input.GetKey(KeyCode.Z))
        {
            Time.timeScale = slowPower;
            Time.fixedDeltaTime = Time.fixedDeltaTime * Time.timeScale;
        }
        else
        {
            Time.timeScale = 1;
        }
    }
}

В строке #5 мы создали переменную slowPower со значением 0.5f. То-есть, игровое время будет замедляться в 2 раза. Это значение можно как увеличить так и уменьшить.

В строке #9 мы проверяем нажатие клавиши Z. И если она нажата, то в строке #11 мы в свойство Time.timeScale записываем значение 0.5f, тем самым замедляя время. А вот следующая строчка нам нужна для того, чтобы наша замедленная игра не проигрывалась рывками, а все объекты в данной игре двигались плавно.

Если же клавиша Z не нажата, то в строке #16 мы возвращаем скорость игры обратно на 1.

Бонус

Чтобы игрок не использовал эффект замедления времени всегда, для игрока обычно создаётся энергия. При активации замедления времени, энергия уменьшается, иначе - нарастает. Это позволит игроку использовать замедление времени только в самых необходимых случаях.

Давайте перепишем наш код:

using UnityEngine;

public class SlowTime : MonoBehaviour
{
    public float slowPower = 0.5f;
    public float energy = 100;
    public float maxEnergy = 100;

    void Update()
    {
        if (Input.GetKey(KeyCode.Z))
        {
            if(energy >= 0.05)
            {
                energy = energy - 0.05f;
                Time.timeScale = slowPower;
                Time.fixedDeltaTime = Time.fixedDeltaTime * Time.timeScale;
            }
            else
            {
                energy = 0;
            }
        }
        else
        {
            if (energy < maxEnergy)
            {
                energy = energy + 0.01f;
            }
            else
            {
                energy = maxEnergy;
            }
            Time.timeScale = 1;
        }
    }
}

Как видите, здесь мы добавили 2 новых переменные, которые отвечают за размер Вашей энергии, и за максимальное количество энергии, которое может быть у персонажа.

Так же при нажатии на кнопку Z, мы уменьшаем текущий запас энергии, а если кнопка не нажата, то наоборот, увеличиваем её.

Так же у нас имеются две дополнительные проверки на то, чтобы текущая энергия игрока не превышала максимально допустимое значение, и чтобы энергия не имела отрицательное значение.

На этом всё.Если Вам понравился данный гайд, ставьте лайки и пишите комментарии. Спасибо :)

Вы можете отблагодарить автора донатом. ₽ Спасибо

Комментарии

0
Будьте первым, кто оставит комментарий к этому посту
Гости не могут оставлять комментарии. Войдите на Сайт или Зарегистрируйтесь