c# - 团结麦克尼姆。如何在禁用游戏对象之前重置动画

标签 c# unity-game-engine animation unity3d-mecanim

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

我用

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

带有动画组件的游戏对象(正在进行动画处理)可能会被我的一些脚本禁用。 动画播放时可能会发生这种情况。 因此,如果动画开始播放,并且假设动画使按钮变大,则游戏对象将被禁用。当游戏对象重新启用(动画不再播放)时,它仍然很大。 有没有办法告诉 Animator 恢复正常? 我已经在 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 Controller 的当前状态

Animator.keepAnimatorControllerStateOnDisable = false

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


更新

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

正如您提到的,编写以下代码

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

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

关于c# - 团结麦克尼姆。如何在禁用游戏对象之前重置动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60941301/

相关文章:

c# - Unity异常: Transform child out of bounds

animation - 在 gnuplot 中制作电影的更快方法

android - 帧动画绘制出中心

c# - 我会通过将新值 [] 分配给填充数组来导致内存泄漏吗

javascript - 如何在asp.net c#中使用javascript从ajax组合框中获取选定的值

android - 在 Android 应用程序中集成两个 Unity 项目

python - 如何在 Matplotlib 中为文本设置动画?

c# - HttpListener 类是否已弃用?

c# - Xamarin iOS UIButton 如何以编程方式单击按钮?

unity-game-engine - MRTK 中的哪个脚本增强了全息图稳定性?