如何使用脚本在 unity5 中触发相同的动画师状态?

How to trigger the same animator state in unity5 with script?

示例:

动画师有两种状态:空闲、攻击。

在动画过渡设置中:

默认 -> 空闲

攻击(退出时间为 1)-> 空闲

目标:

我想在点击鼠标时播放攻击动画。

问题:

使用animator.Play("attack");会成功触发攻击状态,但是当我马上点击鼠标时,如果攻击状态的动画还没有结束,就不会再触发了。

我找了一段时间,只找到了这个: http://answers.unity3d.com/questions/787605/mecanim-equvalent-of-animationstop.html

如何解决这个问题?谢谢!

你在动画师的东西里有一个任何状态,我想你可以把你的攻击状态附加到那个上。在参数中添加一个布尔值,让它从 'any state' 变为你的攻击状态。您可以在代码中设置 bool。不要忘记也为空闲添加一个出口。 所以它看起来像这样:

任意状态 -> 攻击 -> 空闲 <- 默认

或类似的东西

More on the any state.

解决这个问题的一个方法是在 Play("attack") 之前调用 Play("idle")。状态将转变为空闲状态,然后立即转变为攻击状态。但是下面的代码 不起作用 .

public void PlayAttackAnimation()
{
    animator.Play("idle");
    animator.Play("attack");
}

我已经找到了一种方法,使其按如下方式工作。

bool playAttack = false;

public void PlayAttackAnimation()
{
    animator.Play("idle");
    attackAnimFlag = true;
}

void LateUpdate()
{
    if (attackAnimFlag)
    {
        attackAnimaFlag = false;
        animator.Play("attack");
    }
}

这适用于 Unity 5.2.2f1,但感觉有点乱。

注意:它只适用于LateUpdate(),如果你把第二部分改成Update(),它将不起作用。我不知道为什么,猜测 Unity 一定做了一些与动画师状态在 Update() 和 LateUpdate() 之间变化有关的事情。