gpt4 book ai didi

c# - Mathf.Atan2 返回不正确的结果

转载 作者:行者123 更新时间:2023-11-30 19:57:22 26 4
gpt4 key购买 nike

有时当我移动鼠标(围绕角色旋转相机)时,我的角色会旋转。但是我没有通过鼠标进行任何字符旋转。这是我的旋转代码,它仅取决于键盘输入(我从标准统一示例中获取了这段代码):

private void ConvertMoveInput()
{
Vector3 localMove = transform.InverseTransformDirection(_moveInput);
_turnAmount = Mathf.Atan2(localMove.x, localMove.z);
_forwardAmount = localMove.z;
}

我发现有时当我移动鼠标时 Mathf.Atan2 返回数字 PI,即使两个参数仍然等于零。这是怎么发生的?

Breakpoint

我的演示项目 here .

最佳答案

请记住,atan2(x, z) 返回 z 轴与向量 (x, z) 之间的角度:

Graph showing the vector (x, z), atan2(x, z), and atan2(z, x)

但是对于 atan2(0, 0),您试图找到一个点与 z 轴或 x 轴之间的角度,这是没有意义的:

enter image description here

即使 atan2(0, 0) 没有意义,大多数编程语言数学库都有 atan2(x, y) 来返回一个值而不是错误代码,如果xy 是有效数字,在 atan2(0, 0) 的特殊情况下,返回值为 pi。 The implementation of atan2() in the C++ standard library does this,我认为很多语言,包括 Unity 的 C# 实现,都在效仿。

这意味着您需要检查 xz 均为 0 的特殊情况。类似于:

if ((localMove.x != 0) && (localMove.z != 0)) {
_turnAmount = Mathf.Atan2(localMove.x, localMove.z);
}
else {
_turnAmount = 0;
}

关于c# - Mathf.Atan2 返回不正确的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30324015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com