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



Текстовая расшифровка видео

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

Этот урок предназначен для тех, кто уже знаком с понятием Delta Time в Unity и, возможно, с интерполяциями, такими как Slerp. Я уже рассматривал эти понятия в других базовых уроках, которые вы можете найти в виде видео на английском языке на канале и в виде текстовых версий на нескольких языках на моем сайте.

В показанном примере я для простоты напишу код движения вдоль оси X, но его можно легко расширить и для вертикального движения вдоль оси Y.

Начнем с базового скрипта, который привязывает позицию камеры к позиции персонажа, за которым нужно следовать. Скрипт, здесь названный Camera Controller, сразу включает приватную переменную типа Transform, которую необходимо назначить в editor объекту для отслеживания, чтобы можно было получить его позицию.

В функции Update у нас есть переменная типа float, которая получает координату X позиции игрока и используется в позиции камеры вместо собственной координаты X камеры, в значении с именем Camera X, чтобы камера следовала за персонажем мгновенно.

Первый вариант, который мы попробуем, использует Lerp, поэтому я добавляю приватную переменную с именем Follow Time типа float, которую можно настраивать в editor для подбора параметров. В функции Update я использую вариант номер 2 для определения координаты X камеры, которая теперь задается результатом функции Lerp.

Lerp является встроенной функцией Unity, которая выполняет линейную интерполяцию между текущей позицией объекта, заданной через Transform Position, и целевой позицией, заданной через Player Position. Параметр интерполяции представлен отношением между Delta Time и переменной Follow Time, что позволяет управлять скоростью постепенного приближения камеры к целевой позиции и облегчает настройку этого поведения во время выполнения также через editor.

С функцией Lerp на каждом кадре камера обновляет свою позицию, постепенно приближаясь к цели. Таким образом движение камеры выглядит менее резким по сравнению с мгновенным перемещением. Однако Lerp выполняет линейную интерполяцию без замедления скорости возле точки назначения, и это может сделать движение менее естественным на завершающей стадии приближения. Чтобы получить более плавный переход, используется метод Smooth Damp.

Затем я добавляю две новые переменные с именами Smooth Time и Velocity. В частности, Smooth Time является приватной переменной типа float, которая используется для настройки интерполяции так же, как Follow Time в случае Lerp. Переменная Velocity является переменной типа float, передаваемой в метод Smooth Damp для хранения текущей скорости во время выполнения.

Встроенный метод Smooth Damp позволяет реализовать менее резкое движение с затуханием, при котором скорость уменьшается по мере приближения камеры к целевой позиции. Переменная Velocity представляет текущую скорость камеры вдоль рассматриваемой оси. Velocity передается в метод по ссылке и автоматически обновляется на каждом кадре во время интерполяции.

В коде координата X камеры теперь задается результатом интерполяции, выполненной с помощью Smooth Damp, концептуально похожей на Lerp, поскольку она интерполирует между двумя значениями, но обеспечивает более плавный переход и в сигнатуре метода также использует переменную типа float Velocity.

Smooth Damp можно рассматривать как развитие Lerp, которое вводит постепенное затухание скорости и делает движение более естественным.

Ну что ж, на этом все для этого видео! Если оно оказалось полезным, вы можете поблагодарить меня лайком и подпиской на канал. До скорой встречи!

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


РАСШИРЕННАЯ ИНФОРМАЦИЯ О ПОЛИТИКЕ КОНФИДЕНЦИАЛЬНОСТИ И ИСПОЛЬЗОВАНИИ ФАЙЛОВ COOKIE