如何解决运动学刚体设置线速度为0时的不支持报错?
解决运动学刚体无法设置速度的问题
你遇到的报错「setting linear velocity of a kinematic body is not supported」核心原因是:你的Rigidbody被设置为了Kinematic(运动学)状态,这种状态下Unity禁止直接修改velocity属性——运动学刚体由Transform、动画或脚本手动控制位移,而非物理引擎驱动,物理速度对它完全无效。
下面给你几种可行的解决思路,根据你的实际需求选择:
情况1:不需要保持运动学状态
直接关闭Rigidbody的IsKinematic开关,之后就能正常设置速度让物体停止:
// 先关闭运动学状态 objectRigidbody.isKinematic = false; // 瞬间停止 objectRigidbody.velocity = Vector3.zero; // 平滑减速(注意乘Time.deltaTime保证帧率无关) float velocityChangeSpeed = 10f; objectRigidbody.velocity = Vector3.Lerp(objectRigidbody.velocity, Vector3.zero, velocityChangeSpeed * Time.deltaTime);
情况2:必须保持运动学状态
如果因为动画、场景逻辑等原因不能关闭运动学,要通过控制位移逻辑让物体停止:
- 停止所有驱动运动学刚体移动的代码:比如你之前用
MovePosition、MoveRotation这类方法控制位移,只要暂停调用这些方法,物体就会停止。 - 固定Transform位置:如果是动画导致的移动,暂停动画或切换到静止状态;如果是脚本驱动,直接不再更新Transform的position值即可。
- 重置运动状态:若需要瞬间让它停在当前位置,保持当前Transform坐标不变就行——运动学刚体本身没有物理惯性,不会自己移动。
内容的提问来源于stack exchange,提问作者Game of HB - YT
相关产品推荐
相关产品推荐

