在Unity中播放动画时出现问题。我进行了交易,并在动画上设置了布尔值。这里的问题是,如果我在循环上放动画,它不会停止。如果我取消循环播放,它只会播放一次。我真正想要的是仅在玩家按下按钮时才播放。现在我的代码看起来像这样。我试图在不同的地方将布尔值设置为false,但是效果不理想。我将不胜感激。谢谢
private void Inflations()
{
inflationTimer -= Time.deltaTime;
//if hands are in mount area inflate
if (OVRInput.GetDown(OVRInput.Button.Any))
{
if (inflationTimer <= 0 && rightHand.inflated)
{
if (inflated)
{
inflationTimer = inflationSpawn;
inflated = false;
inflationAnimator.SetBool("Pressed", true);
//we can add inflations only if they are under 2 and if the button is pressed and released
inflations++;
}
else
{
inflationAnimator.SetBool("Pressed", false);
}
tempo.SetInflations(inflations);
}
}
if (OVRInput.GetUp(OVRInput.Button.Any))
{
if (!inflated)
{
inflated = true;
}
}
if (inflations >= 2)
{
inflationAnimator.SetBool("Pressed", false);
state = stueState.TakeInflator;
inflationsDone = true;
}
}
答案 0 :(得分:1)
@ecco是正确的,您需要两个状态
在没有看到Animator Controller的情况下,您可以使用类似这样的内容;
//...
Stack<Action> _animations = new Stack<Action>();
private void Inflations()
{
// ...
if (OVRInput.GetDown(OVRInput.Button.Any))
{
if(inflated){
// your code
_animations.Push(() => inflationAnimator.SetBool("Pressed", true));
// ...
}
}
}
private void Update(){
if(_animations.Count > 0){
var currentAnimation = _animations.Pop();
currentAnimation();
}
}
这消除了对大量if检查的需求,并且很好用。
注意:为简单起见,我在这里使用了 lambda表达式 。您可以在here中了解更多信息。您还可以阅读有关 Stack 容器here
的更多信息更新功能将检查堆栈中是否有动画,如果有,它将自动执行一次并将其从堆栈中删除。