Создание эффекта плавной камеры, следующей за объектом — краткий туториал
Поэтапное описание реализации эффекта с примером кода.
Пользователь Reddit под ником Awsomelity опубликовал короткий туториал для Unity, в котором показал, как сделать камеру, плавно следующую за объектом. Автор представил код, а также подробно показал все этапа реализации этого эффекта.
На сцене вам понадобится лишь несколько объектов: направленный свет, плоскость, предмет и камера. Сперва нужно создать скрипт.
Затем прикрепите скрипт к камере и откройте его. В этом окне удалите ненужную часть кода.
Затем вам нужно добавить переменную «object» — это объект, за которым следует камера, а также переменную «distanceFromObject» — дистанция камеры относительно объекта. Для этого добавьте следующий код:
Затем нужно добавить функцию «LateUpdate».
Новая часть кода:
Пора добавлять новые переменные: «positionToGo» — переменная, которая указывает на какую позицию переместится камера, «smoothPosition» определяет, насколько плавным будет перемещаться камера. Показатель «t:0.125F» определяет скорость движения камеры — вы можете замедлить или ускорить её, меняя значение. Пример кода:
Затем перетащите камеру, чтобы установить её базовое положение относительно объекта. Когда вы сделаете это, перенесите значение в поле «Distance From Object», которое находится в окне Inspector.
На этом этапе эффект плавной камеры выглядит вот так:
Но это пока не финальная версия эффекта. Теперь нужно сделать так, чтобы камера поворачивалась за объектом. Для этого достаточно всего одной строчки кода:
Вот так выглядит финальная версия эффекта:
Полный код:
Даже по последней гифке видно, что камера нифига не плавно поворачивает.
Автору стоит почитать и понять то как работает lerp, в его варианте каждый вызов ф-ии LateUpdate будет перемещать камеру на 12.5% от требуемого смещения. И чем дальше и быстрее обьект будет удаляться от камеры тем более вырвиглазно это будет выглядеть.
К тому же, константное значение dt в лерпе делает его fps-независимым => на разных fps, результат будет выглядеть по разному.
Для действительно плавного движения нужно либо кидать реальный dt, либо задавать тайминг за который камера должна "догонять" обьект и использовать этот тайминг (ессно с реальным dt) в функциях плавности (https://easings.net/ru)
В догонку https://chicounity3d.wordpress.com/2014/05/23/how-to-lerp-like-a-pro/
Комментарий недоступен
Да вообще пиздец. Самое главное, плавная камера вещь действительно нужная, особенно плавная камера с ограниченными углами поворотов, в широкими диапазоне угловых и линейных скоростей, с контролем тайминга поворотов и движения, расстояний, ну и т.д. Да и тонкости могут разные быть всякие особенно в сочетании с UI и физикой.
Но нет, все завалено исключительно статьями про lerp в LateUpdate, еще и с ошибками, lol.
Эт если честно немного напрягает — везде одно и тоже и далеко от интересных рецептов профессионалов (как например, раньше выпускались всякие Gems)
Cinemachine
Да, юнитевцы и сами выкатили урок. https://www.youtube.com/watch?v=537B1kJp9YQ&ab_channel=Unity
Для быстрой эффективной реализации - да.
Но в данном случае, как я понял, контент именно что обучающий.