在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;