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

时间:2019-08-08 10:38:53

标签: c# unity3d game-engine

try {
    $memcache->set($key, serialize($Rows), MEMCACHE_COMPRESSED, 36000);
} catch(...) {
    // do nothing
}

İ正在尝试制作2D hack&slash游戏,这就是为什么我需要一个战斗系统。 因此,要执行此操作,我想制作两个动画,SlashR用于右剑,SlashL用于左剑。我想要做的是,如果我按下鼠标按钮并且我的角色向右转,则将播放SlashR动画,反之反之亦然。 但是当我按下鼠标按钮(flipX = false)时,SlashR动画只播放一次。完成一个动画后,动画将完全停止,反之亦然。 但是也有奇怪的事情,当我向左转角色,然后向右转时,SlashR动画再次播放。 注意:SlashR和SlashL的循环时间未选中

2 个答案:

答案 0 :(得分:1)

根据来自动画师的状态图,SlashRSlashL的状态在完成后不会返回到Idle
动画完成后,这将使剪切状态保持其当前状态。

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

编辑

  

但是也有奇怪的事情,当我向左转角色,然后向右转时,SlashR动画又在播放。

那是因为在您的

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

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

您不检查玩家当前是否在先进攻。
这样,当播放器在攻击时左右移动时,另一个动画立即开始播放。

解决方案是正确使用动画师
Image of how your animator should look like

您的新代码应为:

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");
}

答案 1 :(得分:1)

请检查图像。

您可以右键单击状态并选择进行转换等。

Make Transition

使用Animator状态机中的转换工具。 您必须在slashR到闲置之间进行切换,并在slashR到空闲之间进行转换,并为slashL进行相同的操作。

例如: 如果您想更改状态,可以这样设置布尔值true,

 anim.SetBool ("SlashL", true);

不要忘记具有hasExit时间框。

勾选退出时间后,如果动画完成,则播放下一个动画。 如果选中“具有退出时间”,则该值表示过渡生效的确切时间