【问题标题】:Unity2D animation stops after it finished first animationUnity2D 动画在完成第一个动画后停止
【发布时间】:2019-08-08 10:38:53
【问题描述】:
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 是左剑。我想要做的是,如果我按下鼠标按钮并且我的角色向右转,那么将播放 SlashR 动画,反之亦然反之亦然。 但是当我按下鼠标按钮时(flipX=false)SlashR 动画只播放一次。一个动画完成后,动画完全停止,反之亦然。 但也有奇怪的事情,当我向左转我的角色然后向右转时,SlashR 动画又开始播放了。 注意:未选中 SlashR 和 SlashL 的循环时间

【问题讨论】:

  • 您能否附上您正在使用的 Animator 的状态图屏幕截图?
  • 是的,这里是pasteboard.co/IrJjIPJD.png。我不使用动画师来制作这些斜线动画,因为动画师会导致动画撕裂问题,所以我想为动画 SlashR 和 SlashL 使用脚本。

标签: c# unity3d game-engine


【解决方案1】:

根据您的 Animator 的状态图,您的 SlashR 和 SlashL 状态在完成后不会回到 Idle。
这将导致 slashing-states 在动画完成后保持其当前状态。

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

编辑

但也有奇怪的事情,当我向左转我的角色然后向右转时,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");
    }

您不检查玩家当前是否先攻击。
这会导致其他动画在玩家攻击时左右移动时立即开始播放。

解决方案是正确使用您的动画师:

你的新代码应该是:

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

【讨论】:

  • 但是当我把我的角色向左转的时候,SlashR 动画就可以播放了。所以,同样的,左右转会使动画重置。
  • @ShooterLensAim 我编辑了我的答案。应该解决问题
  • 嗨,谢谢,几乎完美。但是当我连续按下鼠标按钮时,斜线动画有时不播放。好像有一个错误。
  • 你能确保没有从空闲到任何斜线状态的退出时间吗?否则它真的只是我不时遇到的一个错误,它真的很烦人。希望知道的人可以发布该错误的解决方案。
  • 您好,我通过将 Input.GetMouseButtonDown 更改为 Input.GetMouseButtonDown 解决了这个问题。是的,这就像魔术:D 但我不知道为什么斜线动画不能与 Input.GetMouseButtonDown 完美配合.是的,它可能是一个错误,或者我是白痴。
【解决方案2】:

请检查图像。

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

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

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

 anim.SetBool ("SlashL", true);

不要忘记有退出时间框。

当退出时间被勾选时,如果动画完成则播放下一个动画。 如果勾选了Has Exit Time,这个值代表了transition可以生效的确切时间

【讨论】:

  • İ 这样做了,但是此时我重复单击时不会播放斜线动画。当我按下按钮 3 秒时一切都很好。但是我想在按下鼠标按钮时播放动画。 pasteboard.co/IrJvBnP.png
  • 检查 hasExit 时间框@ShooterLensAim
  • hasExit time 在所有状态下都未选中。这里是pasteboard.co/IrJxdHx.png
猜你喜欢
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-06
相关资源
最近更新 更多