在协同程序中我设置了刚体的速度来跟随触摸屏的位置:
rb.velocity = direction * touchDragPhysicsSpeed;
但我还想让它的旋转趋向于零度。我该怎么做?
人工智能一直告诉我做这样的事情:
Quaternion targetRotation = Quaternion.Euler(Vector3.zero);
rb.MoveRotation(Quaternion.Slerp(rb.rotation, targetRotation, rotationCorrectionSpeed));
但是 MoveRotation 行给出了错误:
参数 1:无法从“float”转换为“UnityEngine.Quaternion”
这是正确的方法吗?如果是这样,我该如何修复错误?或者有更好的方法吗?
听起来你的
rb
实际上是一个,Rigidbody2D
在这种情况下确实rb.rotation
是一个float
(单个 Z 轴旋转 - 唯一对 2D 重要的旋转)!你宁愿想要
当你想旋转到最接近 360 的倍数时
这应该以最短的路径旋转到最接近 360 的倍数。
一般提示:不要盲目相信 AI,而是咨询 API;)
从Unity - Scripting API 文档中 Quaternion.Euler 可知,您无法将其
Vector3.zero
作为参数传递,因为沿 3 个轴的旋转角度需要浮点数。您传递了一个四元数,在本例中为Vector3.zero
。单独传递值,而不是
Vector3.zero
。