统一机制。如何在禁用游戏对象之前重置动画

Unity Mecanim. How to reset animation before disabling a gameobject

统一 2019.3.7f1 .. 与我合作的艺术家使用 mecanim 系统 Animator 组件为一些 UI 东西制作了一些动画。

我用

触发动画
Animator.SetTrigger("ParamaterName")

我的一些脚本可能会禁用带有动画组件的游戏对象,这些游戏对象正在制作动画。 这可能在动画播放时发生.. 因此,如果动画开始播放,假设动画使按钮变大,则游戏对象将被禁用。重新启用游戏对象时(动画不再播放)它仍然很大.. 有没有办法告诉动画师恢复正常? 我在 GameObject

的脚本中的 onEnable 和 OnDisable 中尝试过类似的东西
    Animator.keepAnimatorControllerStateOnDisable = false
    Animator.Play("normalState",0,0f);
    Animator.playbackTime = 0f;
    Animator.Update(0f);

这个 mecannim 东西就其工作原理而言就像一个黑盒子。我不熟悉它,因为我一直只是使用我自己的库来制作我用了很多年的东西的动画。

编辑: 这就是解决方案...

private void Start()
{
    Animator.keepAnimatorControllerStateOnDisable = true;
}

private void OnDisable()
{
    Animator.Play("normalState",0,0f);
}

确保您的 keepAnimatorControllerStateOnDisable 未设置为 true。相反,您应该设置为 false 以清除 Animator 控制器的当前状态

Animator.keepAnimatorControllerStateOnDisable = false

这样,每当您使用 Animator 禁用对象时,Animator 状态及其所有参数都会恢复为默认值。


更新

从您的评论中我们可以了解到默认设置是将按钮设置得更大一些。所以,它实际上是相反的(将其设置为 true,而不是 false)。

如你所言,编写如下代码

private void Start()
{
    Animator.keepAnimatorControllerStateOnDisable = true;
}

private void OnDisable()
{
    Animator.Play("normalState",0,0f);
}