Unity脚本无法限制物体下落速度,附代码求解决
问题排查与修复方案
核心问题点
- 默认值逻辑错误:你将
verSpeedLimit默认设为0,执行Mathf.Clamp(rb.velocity.y, -verSpeedLimit, Mathf.Infinity)时,相当于把y轴速度限制在0到正无穷区间。但Unity默认y轴向上,物体下落时y轴速度为负数,这个Clamp等于完全没起作用,负数直接跳过了限制范围。 - 物理更新时机错误:在
Update里修改刚体速度不可靠,Unity的物理计算在FixedUpdate阶段执行,Update帧率不稳定,你修改的速度很可能被物理系统的下一次计算覆盖。
修复后的代码
using UnityEngine; public class test : MonoBehaviour { Rigidbody rb; // 默认设为大于0的数值,代表允许的最大下落速度(y轴速度为-verSpeedLimit时触发限制) public float verSpeedLimit = 10f; void Start() => rb = GetComponent<Rigidbody>(); // 改用FixedUpdate处理物理相关操作 void FixedUpdate() { float clampedYVelocity = Mathf.Clamp(rb.velocity.y, -verSpeedLimit, Mathf.Infinity); rb.velocity = new Vector3(rb.velocity.x, clampedYVelocity, rb.velocity.z); } }
额外注意事项
- 一定要在Inspector面板里确认
verSpeedLimit是大于0的数值,比如10、20,数值越大允许的下落速度越快。 - 如果项目里还有其他修改刚体速度的脚本,也需要把它们的更新逻辑放到
FixedUpdate里,避免不同脚本的速度修改互相覆盖。
内容的提问来源于stack exchange,提问作者SirScarlet
相关产品推荐
相关产品推荐

