Unity2D 动画在完成第一个动画后停止

Unity2D animation stops after it finished first animation

void attacking()
    {
        if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false)
        {
            anim.Play("SlashR");

        }if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
            anim.Play("SlashL");
        }

        if (health.rectTransform.sizeDelta.x <= 0)
        {
            anim.SetBool("death", true);
            isDeath = true;
        }
        else
        {
            anim.SetBool("death", false);
            isDeath = false;
        }
    }

İ 正在尝试制作 2D 砍杀游戏,这就是我需要战斗系统的原因。 所以,为此我想制作两个动画,SlashR 用于右剑,SlashL 用于左剑 sword.What 我想做的是如果我按下鼠标按钮并且我的角色向右转然后将播放 SlashR 动画,反之亦然。 但是当我按下鼠标按钮(flipX=false)时,SlashR 动画只播放一个 times.After 一个动画完成,动画完全停止,反之亦然。 但也有奇怪的事情,当我向左转我的角色然后向右转时,SlashR 动画再次播放。 注意:未检查 SlashR 和 SlashL

的循环时间

根据您的 Animator 提供的状态图,您的 SlashRSlashL 状态在完成后不会返回 Idle
这将导致 slashing-states 在动画完成后保持当前状态。

SlashRSlashLIdle (或任何你想要的状态)进行状态转换,它应该可以解决问题。

编辑

But there's weird thing as well,when i turn my character left and after that turn right,SlashR animation is playing again.

那是因为在你的

        if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false)
    {
        anim.Play("SlashR");

    }if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
        anim.Play("SlashL");
    }

你没有检查玩家当前是否在先攻击。
这导致当玩家在攻击时左右移动时另一个动画立即开始播放。

解决方法是正确使用你的动画师

你的新代码应该是:

if ((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==false) {
     anim.SetTrigger("SlashR");
} else if((_attack.attackk || Input.GetMouseButtonDown(0)) && spr.flipX==true){
    anim.SetTrigger("SlashL");
}

请检查图像。

您可以右键单击状态并select进行转换等

使用 Animator 状态机中的过渡工具。 您必须在 slashR 到空闲和空闲到 slashR 之间进行转换,对于 slashL 也是如此。

例如: 如果你想改变状态,你可以像这样设置布尔值 true,

 anim.SetBool ("SlashL", true);

别忘了有退出时间框。

勾选退出时间后,如果动画播放完毕则播放下一个动画。 如果勾选了 Has Exit Time,这个值表示转换可以生效的确切时间