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

Unity 2D玩家按水平方向键移动时突发快速下坠问题求解

问题根因

你贴出的水平移动代码逻辑存在计算错误,是导致按住方向键时极速下落的直接原因:
controller.velocity = controller.velocity + new Vector2(horizontal * speed, controller.velocity.y);
Unity中Vector2的加法运算会对两个向量的x、y分量分别相加,上述代码等价于:

  • 新x轴速度 = 原x轴速度 + horizontal * speed
  • 新y轴速度 = 原y轴速度 + 原y轴速度 = 原y轴速度 * 2
    只要按住方向键执行这段代码,y轴的下落速度就会每帧翻倍,自然会出现极速向下加速的异常。

修复方案

只需要把速度赋值逻辑改为仅修改x轴分量、保留原有y轴速度即可,不需要额外做向量加法:

// 替换原来的两行velocity赋值代码
controller.velocity = new Vector2(horizontal * speed, controller.velocity.y);

如果希望保留移动惯性,可以只给x轴加增量,y轴不做额外叠加:

controller.velocity = new Vector2(controller.velocity.x + horizontal * speed, controller.velocity.y);

其他可选优化点

  • 跳跃逻辑的速度赋值也可以优化,避免叠加异常:如果是常规单跳需求,直接替换y轴速度即可:controller.velocity = new Vector2(controller.velocity.x, veritical * jumpSpeed);
  • 把speed、jumpSpeed变量改为float类型,方便后续微调移动手感
  • Start方法中主动设置向下初速度的代码可以删除,重力会自动模拟下落效果
  • 地面检测的射线长度可以根据玩家碰撞盒的实际高度调整,避免误判

内容的提问来源于stack exchange,提问作者Meerfall the dewott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:48:03