BlendSpace1D/2D动画异常:右移时左行走动画被优先触发
解决BlendSpace2D左右移动动画触发反向的问题
核心问题是你只让AnimationTree切换到了"walk"状态,但没有给BlendSpace2D传递用于动画混合的横向轴参数,导致它无法根据输入方向选择正确的动画,默认停留在左侧的左行走节点上。
修复步骤:
确认BlendSpace2D参数配置
打开你的BlendSpace2D资源,确保Horizontal(X轴)绑定的是控制左右方向的参数,并且左行走动画对应X轴-1的位置,右行走动画对应X轴1的位置。修改代码传递混合参数
在move函数中,进入walk状态时,需要把输入的横向轴值传给BlendSpace2D的blend_position参数,替换原来单纯的animation_node.travel("walk")逻辑:func move(delta): axis = get_input_axis() if axis == Vector2.ZERO: apply_friction(FRICTION * delta) if animation_node.current_state != "Idle": animation_node.travel("Idle") else: apply_movement(axis * ACCELERATION * delta) if animation_node.current_state != "walk": animation_node.travel("walk") # 向BlendSpace2D传递横向方向参数 animation_tree.set("parameters/walk/blend_position", Vector2(axis.x, 0)) move_and_slide()这里用
axis.x直接作为X轴参数,因为它的值是-1(左)、1(右),正好匹配BlendSpace2D的轴范围。如果你的BlendSpace2D用的是速度值作为轴,也可以用velocity.x / MAX_SPEED来做归一化处理。避免频繁状态切换
增加animation_node.current_state判断,只有当前状态不是目标状态时才调用travel,避免每帧重复触发状态切换,提升性能同时减少动画异常。
额外检查点
- 确认BlendSpace2D的
blend_position参数路径正确,比如如果你的BlendSpace2D在状态机里的节点名不是"walk",要对应修改路径。 - 测试输入时,确保
axis.x在按下右键时返回1,左键返回-1(你的get_input_axis函数逻辑是对的,但可以加个打印验证:print(axis.x))。
内容的提问来源于stack exchange,提问作者Kaymush
相关产品推荐
相关产品推荐

