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
相关产品推荐
相关产品推荐

