Смотри в сторону движения
Часть раздела Физика и игровой процесс путешествия по Unity на Coddy. Урок 44 из 71.
Для transform.LookAt нужна точка, на которую нужно смотреть. Но часто у тебя есть не точка, а направление: скорость, ветер, направление движения объекта. Quaternion.LookRotation(direction) возвращает поворот, при котором вперёд (синяя стрелка z) направлено вдоль этого направления, а верх объекта остаётся направленным к верху мира. Стрела, выпущенная в воздух, сначала направлена вверх, а при падении наклоняется, потому что так же меняется её скорость:
Rigidbody rb;
void Start()
{
rb = GetComponent<Rigidbody>();
}
void Update()
{
if (rb.linearVelocity != Vector3.zero)
{
transform.rotation = Quaternion.LookRotation(rb.linearVelocity);
}
}Важна только направленность, а не длина вектора: (1, 0, 2) и (3, 0, 6) дают одинаковый поворот. У нулевого вектора нет направления, поэтому LookRotation(Vector3.zero) выводит сообщение Look rotation viewing vector is zero и возвращает Quaternion.identity, из-за чего объект мгновенно поворачивается лицом в сторону +z. Поэтому стрела сначала выполняет проверку: когда она останавливается, она сохраняет своё направление. LookAt(target.position) даёт такой же поворот, как LookRotation(target.position - transform.position).
Вертикальная составляющая направления наклоняет вперёд вверх или вниз. Если объект должен оставаться вертикальным, например шагающий в гору персонаж, сначала установи y направления в 0, чтобы объект поворачивался только вокруг оси y. Второй аргумент, LookRotation(direction, Vector3.up), задаёт направление вверх; без него используется Vector3.up.
Задание
СреднеПусть пчела поворачивается в направлении полёта, оставаясь в вертикальном положении.
- В
LateUpdate()задайтеVector3 direction = transform.position - lastPosition;иdirection.y = 0;. - Только если
direction != Vector3.zero, задайтеtransform.rotation = Quaternion.LookRotation(direction);, чтобы неподвижная пчела сохраняла направление взгляда. - Наконец, сохраните
transform.positionвlastPosition.
Нажмите «Играть»: пчела поворачивается к каждому цветку, к которому летит. Затем нажмите «Проверить».
Попробуйте сами
using UnityEngine;
public class FaceMotion : MonoBehaviour
{
Vector3 lastPosition;
void Start()
{
lastPosition = transform.position;
}
void LateUpdate()
{
// Поверни в направлении, в котором пчела переместилась с прошлого кадра.
}
}
Все уроки раздела Физика и игровой процесс
1Твёрдое тело
Гравитация и массаТолкаем с помощью AddForceПрыжок с импульсомFixedUpdate для физикиСкоростьКинематические телаПовторение: пусковая площадка4Корутины
InvokeInvokeRepeating, CancelInvokeВаша первая корутинаЦиклы в корутинахОстановка корутинПовторение: обратный отсчёт10Проект: Побег с арены
АренаОхотники2Столкновения
OnCollisionEnterВо что я попал?Разрушение при столкновенииСтояние на землеОтскок и трениеФормы коллайдеровПовторение: разрушаемая стена5Проект: Монетная гонка
Катящийся шарСобираем монетыПотренируйтесь самостоятельно: Песочница Unity