我的问题是我想根据剩余时间来播放不同的动画,以供用户猜测。由于Unity Update的性质,我当前的代码无法正常工作。不知道如何更改它。不想将其转换为协程,因为我将不得不更改许多以前的代码。非常感谢您的帮助。
if(userGuessing)
{
timerText.gameObject.SetActive(true);
timer -= Time.deltaTime;
timerText.text = timer.ToString("0.00");
Debug.Log(timer);
}
if(timer > 90)
{
bossArmature.animation.Play("BossVeryHappy", -1);
}
else if(timer > 70 && timer < 90)
{
bossArmature.animation.Play("BossHappy", -1);
}
else if(timer > 50 && timer < 70)
{
bossArmature.animation.Play("BossNeutral", -1);
}
else if(timer > 30 && timer < 50)
{
bossArmature.animation.Play("BossAngry", -1);
}
答案 0 :(得分:1)
您可以使用动画器条件根据您的计时器来控制行为,只需将Animator的“ Timer”参数设置为当前计时器值即可。然后使用LessThan条件来浏览不同的动画。
bossArmature.animation.SetFloat("Timer", timer);
它可能看起来像这样
答案 1 :(得分:1)
BugFinder的意思可能是:使用Animator Parameters并像Tobenai's answer那样进行过渡,我实际上更喜欢这样做,因为它更易于维护和扩展。不幸的是,尽管看起来bossArmature.animation
确实是Animator
,但我们实际上并不知道。
但是,如果您要坚持解决方案,我只会添加一个枚举状态
private enum BossState
{
VeryHappy,
Happy,
Neutral,
Angry
}
,并具有一个用于存储此类值的字段:
private BossState state;
和相应的Property用于在值更改时自动更新动画师:
private BossState State
{
get => state;
set
{
state = value;
switch(state)
{
case BossState.VeryHappy:
bossArmature.animation.Play("BossVeryHappy", -1);
break;
case BossState.Happy:
bossArmature.animation.Play("BossHappy", -1);
break;
case BossState.Neutral:
bossArmature.animation.Play("BossNeutral", -1);
break;
case BossState.Angry:
bossArmature.animation.Play("BossAngry", -1);
break;
}
}
}
,然后将Update方法更改为仅在尚未处于该状态的情况下才检查相应的情况,否则,总是在每一帧重新启动动画。
if(userGuessing){
timerText.gameObject.SetActive(true);
timer -= Time.deltaTime;
timerText.text = timer.ToString("0.00");
Debug.Log(timer);
}
if(State != BossState.VeryHappy && timer > 90)
{
State = BossState.VeryHappy;
}
else if(State != BossState.Happy && timer > 70 && timer < 90)
{
State = BossState.Happy;
}
else if(State != BossState.Neutral && timer > 50 && timer < 70)
{
State = BossState.Neutral;
}
else if(State != BossState.Angry && timer < 50)
{
State = BossState.Angry;
}