计算玩家看一些3d世界对象的新角度

时间:2017-02-28 09:14:01

标签: math unity3d rotation

我正在开发一款Unity游戏,其中玩家的欧拉角显示出一些我无法理解的奇怪行为。似乎有两个完整的360度旋转,一个是正的,一个是负的。根据您在yaw度时的方向,它将采用负路径或正路径。这意味着玩家可以拥有完全不同的// make player the origin, so the target is relative to the player Vector3 delta = player.angles - target.angles; float magnitude = delta.Length(); float pitch = asin((delta.y) / magnitude) * (180 / M_PI); float yaw = -atan2(delta.x, -delta.z) * (180 / M_PI); 值,具体取决于它是否采用绿色红色路径。请参阅下图以了解正在发生的事情:

Player rotation

当我想要计算玩家在3d世界空间中查看某个特定对象的新角度时,问题就出现了。我用一些简单的数学计算这个角度:

0 to 180

这会让我回到正确的角度,但是偏航来自-180 to 0,然后是// this makes sure the calculated angle is from 0-360 if (yaw < 0) { yaw += 360; // normalize yaw } 。我这样做是正确的:

// normalize angles for when using negative rotation
if (localAngles[1] < 0)
{
    angles[1] -= 360;
}

double diffPitch = (angles[0] - localAngles[0]);
double diffYaw = (angles[1] - localAngles[1]);

// this makes sure we always take the shortest amount of degrees to target
if (diffYaw < -180)
{
    diffYaw += 360;
}
if (diffYaw > 180)
{
    diffYaw -= 360;
}

所以,现在这与上图所示的红色旋转线对齐。如果我将球员旋转设置为新计算的角度,它将直接正确地看待目标对象。但是,只有当玩家处于红色旋转路径时。

如果播放器位于绿色旋转路径上,则计算出的角度不适合当前用户旋转。如果我现在设置轮换,事情会变得古怪。不知何故,我需要补偿计算出的新玩家角度。

这里发生了什么?是否可以操纵新计算的角度(范围始终为0-360),因此它基于当前玩家的旋转路径(绿色红色)?

我希望我的问题有道理,我发现很难跟踪发生的事情。我希望有人可以解释我的情况并最终帮助我修复新的计算角度,以便调整到当前玩家的旋转路径!

感谢任何帮助,提前谢谢!

修改 所以我想出了以下内容,以确保玩家总是旋转最短的量,同时考虑绿色红色旋转路径:

%in%

我将不得不再测试一下以确保这是解决方案。

0 个答案:

没有答案