首页 > 解决方案 > 攻击动画持续 1 帧

问题描述

您好,我正在 Unity 中制作 2D 自上而下的学生游戏。我被困在动画部分,我的攻击动画持续 1 帧,然后直接回到空闲状态。在 Visual Studio 中使用 C#:

void Update () {
    Move ();    
    float lastInputX = CrossPlatformInputManager.GetAxis("Horizontal");
    float lastInputY = CrossPlatformInputManager.GetAxis("Vertical");

    if (lastInputX != 0 || lastInputY != 0)
    {
        anim.SetBool("Walking", true);
        anim.SetFloat("LastMoveX", lastInputX);
        anim.SetFloat("LastMoveY", lastInputY);
        anim.Play("Walk");
    }
    else if (CrossPlatformInputManager.GetButtonDown("Fire1"))
    {
        anim.SetBool("Attacking", true);
        //StartCoroutine(Attack());
        anim.Play("Attack");
    }
    else 
    {
        anim.SetBool("Attacking", false);
        anim.SetBool("Walking", false);
        anim.Play("Idle");
    }
    float inputX = CrossPlatformInputManager.GetAxis("Horizontal");
    float inputY = CrossPlatformInputManager.GetAxis("Vertical");

    anim.SetFloat("SpeedX", inputX);
    anim.SetFloat("SpeedY", inputY);
}

标签: c#unity3danimation

解决方案


我对此不确定,但如果 CrossPlatformInputManager.GetButtonDown() 的行为与 Input.GetButtonDown() 相同,它将在用户按下的帧期间返回 true,但在用户释放之前不会返回 true键并再次按下。

这意味着在用户按下按钮的第一帧上,它将触发 Attack 动画,但下一帧将返回 false 并触发 Idle 动画。

另外,我不确定为什么要在每个动画上调用 anim.Play(),Animator 参数的目的是在存在给定值时触发动画。


推荐阅读