Unity3d Quaternion LookRotation не возвращает правильное значение - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел, чтобы снаряд смотрел на целевой объект, для этого я использую 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 не выполнено и снаряд не вращается в направлении целевого объекта.

enter image description here

1 Ответ

0 голосов
/ 13 февраля 2019

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 градусов?

...