Unity3d Quaternion LookRotation не возвращает правильное значение

Я хотел, чтобы снаряд посмотрел на целевой объект, для этого я использую Quaternion LookRotation, как показано ниже

targetRotation = Quaternion.LookRotation(targetPosition - projectile.transform.position);
if(targetRotation.eulerAngles.magnitude <= 60)
  projectile.transform.rotation = targetRotation;

здесь я поставил условие if, чтобы сделать его более реалистичным поворотом к цели, иначе снаряд не должен поворачиваться, если его поворот более чем на 60 градусов.

теперь, как на рисунке ниже, мы можем видеть, что целевой объект не более чем под углом 60 градусов, но все же во время отладки я получаю 328 в качестве targetRotation.eulerAngles.magnitude, который получает условие if не выполнено, а снаряд не вращается в направлении целевой объект.

1 ответ

Решение

Quaternion.LookRotation(targetPosition - projectile.transform.position) означает "Дайте мне кватернион, который представляет вращение вектора вверх targetPosition - projectile.transform.position". eulerAngles это просто еще одно представление о вращении, и вы не получите ничего значимого от его величины.

Я подозреваю, что вы этого не хотите. Вместо этого я подозреваю, что вы хотите знать, должен ли снаряд поворачиваться более чем на 60 градусов от его текущего прямого направления. В этом случае вы, вероятно, захотите проверить угол между вектором движения снаряда и его направлением к цели.

У меня нет открытого Unity, поэтому я не знаю, компилируется ли он, но он должен выглядеть примерно так:

var directionToTarget = targetPosition - projectile.transform.position;
var angleToTarget = Vector3.Angle(projectile.transform.forward, directionToTarget);
if (angleToTarget < 60) ...

Вы упомянули, что хотите более "реалистичный" поворот. Что вы хотите сделать от снаряда, если он больше 60 градусов?

Другие вопросы по тегам