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

Unity 2D玩家动画异常求助:向前行走时无跑/跳/攻击动画

玩家向前行走时动画异常排查方案

1. 落地状态的切换逻辑修正

你当前的PlayerFallState在落地后直接切到 idle 状态,忽略了玩家可能还保持向前输入的情况,这会导致落地后明明按方向键却无法进入跑步状态。修改Update方法:

public override void Update()
{
    base.Update();
    if (player.isPLayerGrounded())
    {
        // 落地时判断是否有水平输入,有则切跑步状态,否则切 idle
        if(Mathf.Abs(player.input.x) > 0.1f)
            stateMachine.ChangeState(player.runState);
        else
            stateMachine.ChangeState(player.idleState);
    }
}

2. 动画参数同步检查

  • 确认Animator Controller里的参数(比如isRunning、isAttacking)和脚本中设置的完全一致,没有拼写错误。
  • 检查跑步状态的Update方法里,是否持续同步输入到动画参数,比如:
    // 示例:在PlayerRunState的Update中
    player.anim.SetFloat("MoveSpeed", Mathf.Abs(player.input.x));
    // 或者用布尔参数控制
    player.anim.SetBool("isRunning", Mathf.Abs(player.input.x) > 0.1f);
    

3. 动画状态机过渡条件验证

  • 检查Idle到Run的过渡条件:确保只需要isRunning为true且isGrounded为true,没有多余的限制条件。
  • 确认攻击、跳跃动画在行走状态下的过渡是否允许:比如攻击动画的过渡条件要包含isGrounded和isAttacking,且没有被其他状态(比如Fall)的过渡优先级覆盖。

4. 输入检测时机确认

确保玩家的水平输入(player.input.x)是在Update方法中读取的,而不是FixedUpdate,避免输入滞后导致状态切换不及时:

// 在Player类的Update方法中更新输入
public void Update()
{
    input.x = Input.GetAxisRaw("Horizontal");
    // 其他输入逻辑...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:20:07