Sta*_* BZ 2 c# trigonometry unity-game-engine
有时当我移动鼠标(围绕角色旋转相机)时,我的角色会旋转.但我没有鼠标任何字符旋转.这是我的旋转代码,仅依赖于键盘输入(我从标准统一样本中获取此代码):
private void ConvertMoveInput()
{
Vector3 localMove = transform.InverseTransformDirection(_moveInput);
_turnAmount = Mathf.Atan2(localMove.x, localMove.z);
_forwardAmount = localMove.z;
}
Run Code Online (Sandbox Code Playgroud)
我发现有时当我移动鼠标Mathf.Atan2时返回数字PI,即使两个参数仍然等于零.这是怎么回事?
我的演示项目在这里.
请记住,atan2(x, z)
返回z轴和向量(x,z)之间的角度:
但是atan2(0, 0)
,你试图找到一个点与z轴或x轴之间的角度,这是没有意义的:
即使atan2(0, 0)
是没有意义的,大多数编程语言的数学库有atan2(x, y)
返回值,而不是如果一个错误代码x
和y
有效数字,在特殊情况下atan2(0, 0)
,即返回值是圆周率.C++标准库中的实现就是atan2()
这样做的,我认为很多语言,包括Unity的C#实现,都是如此.
这意味着您需要检查特殊情况,其中x
和z
都是0.类似于:
if ((localMove.x != 0) && (localMove.z != 0)) {
_turnAmount = Mathf.Atan2(localMove.x, localMove.z);
}
else {
_turnAmount = 0;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1580 次 |
最近记录: |