unity刚体.angularvelocity

在unity中利用Rigidbody.angularVelocity设置物体旋转角速度时,物体变化的到底是什么角。当我设置

rb.angularVelocity = new Vector3((float)Math.PI / 180), (float)Math.PI / 180), (float)Math.PI / 180));

输出每一帧中物体的欧拉角

Debug.Log(string.Format("unity Euler Angle:   {0:F3}  {1:F3}  {2:F3} ", 
                  transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, transform.rotation.eulerAngles.z);

结果欧拉角的变化速率并不相同,这是怎么回事。

rb.angularVelocity的值为(float)Math.PI / 180),这表示每秒绕x、y、z轴旋转1度

Unity的物理模拟是基于每帧的固定时间步长进行的,因此在实际模拟中,每帧物体旋转的角度可能会有微小的差异

这就是为什么在输出每一帧中物体的欧拉角时,您会发现欧拉角的变化速率并不完全相同的原因

你可以考虑使用Rigidbody.AddTorque方法来施加扭矩力,或者直接修改transform.rotation来设置物体的旋转。这样可以避免物理模拟带来的微小差异,并更加精确地控制物体的旋转

写一段代码你参考一下


// 使用AddTorque方法施加扭矩力
rb.AddTorque(new Vector3((float)Math.PI / 180, (float)Math.PI / 180, (float)Math.PI / 180));

// 或者直接修改transform.rotation
Quaternion rotation = transform.rotation;
rotation *= Quaternion.Euler((float)Math.PI / 180, (float)Math.PI / 180, (float)Math.PI / 180);
transform.rotation = rotation;