Unity3d Quaternion LookRotation没有返回正确的值

问题描述 投票:0回答:1

我想要一个射弹来查看目标物体,为此我正在使用Quaternion LookRotation,如下所示

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

在这里,我已经把条件变得更加逼真转向目标,否则如果它转60度,则弹丸不应该转动。

现在如下面的图像,我们可以看到目标物体在不超过60度的角度,但仍在调试时我得到328作为targetRotation.eulerAngles.magnitude,这是得到if条件失败和抛射物不转向目标对象。

enter image description here

c# unity3d quaternions euler-angles projectile
1个回答
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度,你想要什么射弹呢?

© www.soinside.com 2019 - 2024. All rights reserved.