Взгляд вперёд
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 49 из 71.
Камера, расположенная по центру движущегося игрока, показывает не только то, куда он направляется, но и то, где он уже был. Вместо этого можно использовать боковой ракурс: размести камеру на расстоянии нескольких единиц перед игроком, с той стороны, куда он движется.
Когда игрок разворачивается, сторона меняется, и если камера сразу же переместится на другую сторону, весь вид резко скачет. Поэтому храни опережение в поле и постепенно сдвигай его к новому значению с помощью Mathf.MoveTowards — понемногу каждый кадр. Эта камера лодки опережает её на 2 единицы и смещается со скоростью 3 единицы в секунду:
float lead;
float heading = 1f; // 1 — плывёт вправо, -1 — плывёт влево
void LateUpdate()
{
lead = Mathf.MoveTowards(lead, heading * 2f, 3f * Time.deltaTime);
transform.position = new Vector3(boat.position.x + lead, transform.position.y, transform.position.z);
}Направление — это то, куда лодка двигалась в последний раз: сравни её координату x с координатой x на предыдущем кадре и не меняй направление в кадре, когда она не двигалась, чтобы лодка, стоящая на месте, сохраняла опережение.
Задание
СреднеСделай так, чтобы боковая камера показывала больше пространства впереди бегуна.
- В
LateUpdate()сравнивай координату x бегуна сlastX: движение вправо задаётdirectionзначение 1, влево — -1, а если бегун стоит на месте, оставляй значение без изменений. - Плавно изменяй
shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);. - Задай координату x камеры равной
player.position.x + shift, сохранив значения y и z.
Нажми «Играть» и побегай в обе стороны. Затем нажми «Проверить».
Попробуйте сами
using UnityEngine;
public class LookAheadCamera : MonoBehaviour
{
public Transform player;
public float ahead = 3f;
public float shiftSpeed = 4f;
void LateUpdate()
{
// Смещайте камеру перед игроком на ahead единиц в направлении его последнего движения, плавно перемещая её со скоростью shiftSpeed.
transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
}
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity