Создание эффекта плавной камеры, следующей за объектом — краткий туториал

Поэтапное описание реализации эффекта с примером кода.

Пользователь Reddit под ником Awsomelity опубликовал короткий туториал для Unity, в котором показал, как сделать камеру, плавно следующую за объектом. Автор представил код, а также подробно показал все этапа реализации этого эффекта.

На сцене вам понадобится лишь несколько объектов: направленный свет, плоскость, предмет и камера. Сперва нужно создать скрипт.

Создание скрипта
Создание скрипта

Затем прикрепите скрипт к камере и откройте его. В этом окне удалите ненужную часть кода.

Удалите часть, выделенную синим цветом
Удалите часть, выделенную синим цветом

Затем вам нужно добавить переменную «object» — это объект, за которым следует камера, а также переменную «distanceFromObject» — дистанция камеры относительно объекта. Для этого добавьте следующий код:

{ [SerializeField] private GameObject _object; //An object camera will follow [SerializeField] private Vector3 _distanceFromObject; // Camera's distance from the object

Затем нужно добавить функцию «LateUpdate».

Выберите функцию «LateUpdate» из выпадающего списка
Выберите функцию «LateUpdate» из выпадающего списка

Новая часть кода:

Event function private void LateUpdate() //Works after all update functions called

Пора добавлять новые переменные: «positionToGo» — переменная, которая указывает на какую позицию переместится камера, «smoothPosition» определяет, насколько плавным будет перемещаться камера. Показатель «t:0.125F» определяет скорость движения камеры — вы можете замедлить или ускорить её, меняя значение. Пример кода:

{ Vector3 positionToGo = _object.transform.position + _distanceFromObject; //Target position of the camera Vector3 smoothPosition = Vector3.Lerp(a:transform.position, b:positionToGo, t:0.125F); Smooth position of the camera transform.position = smoothPosition;
Переместите объект со сцены в поле «Object» в окне Inspector
Переместите объект со сцены в поле «Object» в окне Inspector

Затем перетащите камеру, чтобы установить её базовое положение относительно объекта. Когда вы сделаете это, перенесите значение в поле «Distance From Object», которое находится в окне Inspector.

На этом этапе эффект плавной камеры выглядит вот так:

Камера плавно передвигается за объектом

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

transform.LookAt(_object.transform.position); //Camera will look(returns) to the object } }

Вот так выглядит финальная версия эффекта:

Камера плавно следует за объектом и поворачивается за ним

Полный код:

{ [SerializeField] private GameObject _object; //An object camera will follow [SerializeField] private Vector3 _distanceFromObject; // Camera's distance from the object Event function private void LateUpdate() //Works after all update functions called { Vector3 positionToGo = _object.transform.position + _distanceFromObject; //Target position of the camera Vector3 smoothPosition = Vector3.Lerp(a:transform.position, b:positionToGo, t:0.125F); Smooth position of the camera transform.position = smoothPosition; transform.LookAt(_object.transform.position); //Camera will look(returns) to the object } }
79
24 комментария