Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 四元数Lerp不能提供良好的旋转效果_C#_Unity3d - Fatal编程技术网

C# 四元数Lerp不能提供良好的旋转效果

C# 四元数Lerp不能提供良好的旋转效果,c#,unity3d,C#,Unity3d,我正在尝试平滑地翻转我的第一人称角色,同时能够使用鼠标外观在y轴上旋转播放器。问题是lerp并没有以精确的结果结束。我希望结束旋转结果精确到(transform.up==TargetUpDirection()) 如果我在鼠标翻转时使用鼠标外观,transform.up.y的结果总是小于1,例如0.99881231,我需要继续使用鼠标外观,直到它自我纠正,我不喜欢它 原因可能是当我使用鼠标注视时,字符向前被修改,这导致了这一点,但我不知道如何实现一个解决方案,因为四元数让我感到困惑。这是因为正如所

我正在尝试平滑地翻转我的第一人称角色,同时能够使用鼠标外观在y轴上旋转播放器。问题是lerp并没有以精确的结果结束。我希望结束旋转结果精确到(transform.up==TargetUpDirection())

如果我在鼠标翻转时使用鼠标外观,transform.up.y的结果总是小于1,例如0.99881231,我需要继续使用鼠标外观,直到它自我纠正,我不喜欢它


原因可能是当我使用鼠标注视时,字符向前被修改,这导致了这一点,但我不知道如何实现一个解决方案,因为四元数让我感到困惑。

这是因为正如所写的,
Lerp
总是将您旋转剩余的10%。这意味着,当接近目标旋转时,旋转的量将减少。最终,它将减少到舍入误差使您在实际到达目的地之前旋转0度的点

在大多数情况下,您不希望使用
t
的常量值调用
Lerp

这里有一个替代方案。首先,选择最大转速:

float smooth = 5f;
然后,使用四元数。向前旋转

Quaternion targetRotation = Quaternion.LookRotation(transform.forward, TargetUpDirection());
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation , smooth * Time.deltaTime);

这个答案是根据Unity论坛得出的。

这是因为正如所写的,
Lerp
总是在剩余的10%的时间里轮换你。这意味着,当接近目标旋转时,旋转的量将减少。最终,它将减少到舍入误差使您在实际到达目的地之前旋转0度的点

在大多数情况下,您不希望使用
t
的常量值调用
Lerp

这里有一个替代方案。首先,选择最大转速:

float smooth = 5f;
然后,使用四元数。向前旋转

Quaternion targetRotation = Quaternion.LookRotation(transform.forward, TargetUpDirection());
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation , smooth * Time.deltaTime);

此答案基于Unity论坛。

四元数。Lerp
需要3个参数。抱歉,我将其编辑为添加第3个参数。我将尝试slerp而不是Lerp,但我认为实际的问题可能是mouselook函数中的万向节锁。
Slerp
肯定是使用的,但万向节锁不是问题所在,因为他使用的是四元数。
TargetUpDirection()之后缺少了一个
四元数。Lerp
需要3个参数。抱歉,我编辑了它以添加第3个参数。我将尝试使用slerp而不是Lerp,但我认为实际问题可能是mouselook函数中的万向节锁。肯定要使用
Slerp
,但万向节锁不是问题所在,因为他使用的是四元数。我认为在
TargetUpDirection()
之后缺少一个
。我的解决方案是。我只是在变换定向时锁定鼠标外观,然后在向上对齐时解锁鼠标。不是最好的解决方案,但它可以为我的解决方案工作。我只是在变换定向时锁定鼠标外观,然后在向上对齐时解锁鼠标。不是最好的解决方案,但它可以工作