即使在Unity3D中未选中“循环时间”,动画也会循环播放

时间:2018-12-08 15:42:59

标签: unity3d animation slider

您好,我有一个问题,为什么即使我没有检查动画循环时间并使用布尔值来控制发生的情况,动画仍会继续循环播放。下面是使我的机器人死亡的代码以及Mechanim的屏幕截图。

ZoltainHealth.cs

void Update () {
    if (!isAlive(ZoltainHealthSlider.value)) {
        isDead = true;
        gameObject.GetComponent<Animator>().SetTrigger("Die");

        if (isDead) {
            isDead = false;
            gameObject.GetComponent<Animator>().SetTrigger("Alive");
            reset(gameObject, startingPos, gameObject.tag);
            gameObject.GetComponent<Slider>().value = 100f;
        }
    }
}

我得到的基类Characters.cs是Alive()

public bool isAlive(float life) {
    bool isAlive = true;

    int health = Mathf.RoundToInt(life);

    if (health <= 0) {
        isAlive = false;
    }
    return isAlive;
}

Mechanim的屏幕截图:Screenshot

我也遇到了问题,如果Zoltan死了之后重新生成Zoltan以开始新游戏(如下面的if(isDead)代码所示),则运行状况滑块会重置为全额费用。

1 个答案:

答案 0 :(得分:0)

我假设您正在尝试播放Die动画,然后播放Alive动画并重置状态。

然后下面的代码就可以完成工作。

void Update () {
    if (!isAlive(ZoltainHealthSlider.value)) {
        StartCoroutine (WaitDieAnimationFinishAndPlayAlive);
    }
}

private void WaitDieAnimationFinishAndPlayAlive () {
    yield return new WaitForSeconds(DieAnimationTime);
    gameObject.GetComponent<Animator>().SetTrigger("Alive");
    StartCoroutine (WaitAliveAnimationFinishAndReset);
}
private void WaitAliveAnimationFinishAndReset () {
    yield return new WaitForSeconds(AliveAnimationTime);
    reset(gameObject, startingPos, gameObject.tag);
    gameObject.GetComponent<Slider>().value = 100f;
}

我不确定您遇到的动画循环问题是否是由在同一Die帧处设置AliveUpdate触发器引起的。