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

Unity中Update函数无法正确响应跳跃输入,跳跃效果异常求助

Unity角色跳跃异常的解决思路

核心问题定位

你的代码里有一个明显错误:设置刚体速度时不该乘以Time.deltaTime。velocity是直接赋予的瞬时速度,不是加速度,乘deltaTime会让跳跃力度随帧率波动,导致跳跃高度不稳定,甚至出现位置偏移。

具体修正步骤

  • 修复速度赋值逻辑:
    把跳跃速度的代码改成:

    r.velocity = new Vector2(r.velocity.x, jumpForce);
    

    如果想要更符合物理规律的跳跃,也可以用AddForce(注意选择ForceMode.Impulse模式,因为是瞬时施加的力):

    r.AddForce(Vector2.up * jumpForce, ForceMode.Impulse);
    
  • 优化地面检测准确性:
    角色跳错位置大概率和OnGround的检测逻辑不准有关,建议:

    • 用Physics2D.OverlapCircle或Raycast做地面检测,不要只依赖碰撞器触发事件(避免角色边缘擦碰地面时误判)
    • 检测点尽量靠近角色底部,不要放在模型中心,防止角色悬空时误判为接触地面
  • 分离输入与物理操作:
    输入检测放在Update没问题,但刚体的物理操作最好移到FixedUpdate中执行,避免帧率波动影响物理效果的稳定性:

    private bool jumpRequested = false;
    
    void Update(){
       if(!dead && Input.GetKeyDown(KeyCode.Space)){
          jumpRequested = true;
       }
    }
    
    void FixedUpdate(){
       if(jumpRequested && OnGround){
          r.velocity = new Vector2(r.velocity.x, jumpForce);
          jumpRequested = false;
       }
    }
    
  • 调整跳跃相关参数:
    如果跳跃高度还是不符合预期,逐步调整jumpForce的数值,同时检查刚体的mass属性——角色质量过大需要更大的跳跃力,质量过小则会导致跳跃过高。

内容的提问来源于stack exchange,提问作者Dolev Mitz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:02:16