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

BlendSpace1D/2D动画异常:右移时左行走动画被优先触发

解决BlendSpace2D左右移动动画触发反向的问题

核心问题是你只让AnimationTree切换到了"walk"状态,但没有给BlendSpace2D传递用于动画混合的横向轴参数,导致它无法根据输入方向选择正确的动画,默认停留在左侧的左行走节点上。

修复步骤:

  1. 确认BlendSpace2D参数配置
    打开你的BlendSpace2D资源,确保Horizontal(X轴)绑定的是控制左右方向的参数,并且左行走动画对应X轴-1的位置,右行走动画对应X轴1的位置。

  2. 修改代码传递混合参数
    在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来做归一化处理。

  3. 避免频繁状态切换
    增加animation_node.current_state判断,只有当前状态不是目标状态时才调用travel,避免每帧重复触发状态切换,提升性能同时减少动画异常。

额外检查点

  • 确认BlendSpace2D的blend_position参数路径正确,比如如果你的BlendSpace2D在状态机里的节点名不是"walk",要对应修改路径。
  • 测试输入时,确保axis.x在按下右键时返回1,左键返回-1(你的get_input_axis函数逻辑是对的,但可以加个打印验证:print(axis.x))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:02:26