You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:24:58