如果满足某些条件,则激活 Unity 动画?

问题描述 投票:0回答:2

我正在 Unity 中开发 2d 游戏,但遇到了问题。当出于某种原因尝试为我的一个动画创建动画过渡时,Unity 会立即或非常快速地停用我的动画(比如在我激活它后不到一秒)。但是,当我没有连接到动画的过渡时,动画效果很好。但是,我需要能够在满足特定条件后将游戏对象转换回动画之前的状态,因此我不能让动画继续运行。有谁知道我该如何解决这个问题?

我尝试过切换激活动画的方式,通过尝试使用布尔值和触发器作为确定何时发生转换的条件来查看它是否可能与此相关,但出现了同样的问题

这是我如何激活动画的粗略轮廓

public class InteractControl : MonoBehaviour, IPooledObject
{ 
    public static float timeLeft = 10f;

    public void OnObjectSpawn()
    {
        anim = GetComponent<Animator>();
    }

    // Change this method to just be a temporary obstacle
    void Update() 
    {
        timeLeft -= Time.deltaTime;

        if (timeLeft > 0)
        {
            anim.enabled = true;
        }


        if (timeLeft < 0)
        {
            anim.SetTrigger("FollowAd");
        }
    }
}

广告跟随过渡:

广告关注无需转换:

过渡设置:

如果

timeLeft
大于
0
,则动画应激活;一旦它小于
0
,动画应立即停用,并将游戏对象返回到动画开始之前的状态。现在,如果 Ad Follow_ 没有过渡,则动画在调用时会起作用,但不会停用。如果 Ad Follow_ 有一个连接到它的空状态,它应该转换到

anim.SetTrigger("FollowAd"); 

如上所示被调用,它的工作时间不到一秒或根本不工作,然后直接切换回默认状态。它应该只在

timeLeft < 0
时切换回来。

unity-game-engine animation triggers game-engine animator
2个回答
0
投票

您可以为您所需的动画创建

public RuntimeAnimatorController animCon
。当你的条件满足的时候。你可以做
anim.runtimeanimatorcontroller = animCon;

当条件为假时,执行此操作

anim.runtimeanimatorcontroller = null;
。这不是最好的方法,但比大多数方法更快更好。


0
投票

您有

AllFollow
作为要播放的默认动画。

这意味着当动画控制器实例化时,动画将始终播放。

此外,您向

New state
的过渡也会有
Exit time
。如果您不希望这样,如果您依赖某个条件,请取消选中该框。

并将新的州名称更改为更具信息性的名称:)

© www.soinside.com 2019 - 2024. All rights reserved.