【问题标题】:Unity | How to play animations that are stored in a variable (without having them in the animator)团结 |如何播放存储在变量中的动画(没有动画师)
【发布时间】:2019-09-11 08:21:15
【问题描述】:

我正在创建一个 2D 格斗游戏,玩家可以在其中从多个战士中进行选择。战士有不同的攻击和不同的动画。

每次攻击的数据(伤害、命中框、施法时间、动画等)都存储在一个脚本对象中,然后由玩家脚本触发。到目前为止效果很好,但我不知道如何从代码中播放动画而不需要它在动画师中。

我尝试了几个在这里找到的解决方案,但它们似乎最终不得不退回到将动画放入动画师中。

【问题讨论】:

  • 您可以在代码中触发动画 - 例如使用布尔值。例如,如果您希望在用户按下“A”键时播放正在运行的动画 - 这是您想要做的吗?
  • 给每个替代动画一个名为“attack1”、“attack2”等的触发器,并使用附加到每个动画的触发器来设置动画师。然后从您的代码中随机设置触发器(如果这是您想要的)。 animator中不想做动画的原因是什么?

标签: unity3d animation animator


【解决方案1】:

但我不知道如何从代码中播放动画而不需要它在动画师中。

您将需要Animator-Component 来运行动画。

但是你可以指定你想在运行时播放的动画。为此,您需要 RuntimeAnimationController 来保存 AnimatorController 对象并将其分配给您的 Animator(在代码中)。

【讨论】:

    【解决方案2】:

    您不一定需要this answer 中所述的Animator 组件。

    还有Animation 组件。它被标记为legacy,但仍然非常强大,尤其是当您不需要配置整个状态机而只想简单地播放单个AnimationClip 时。可能是它仍然进入较新的 Unity 版本的原因:

    public AnimationClip clip;
    
    private void Awake()
    {
        var animation = GetComponent<Animation>();
        animation.clip = clip;
        animation.Play();
    }
    

    另见Animation.Play

    【讨论】:

    • 使用遗留组件听起来很冒险,而只是跳过创建具有 one 状态的简单 AnimationController。正如 Unity 所说:This component is retained in Unity for backwards-compatibility only. For new projects, please use the Animator component.
    • @aalmigthy 在这个问题之后不久,legacy 状态实际上已被删除(请参阅Animation API).. 有充分的理由,就像这个用例一样;)现在工作有点不同虽然 API 明智,但概念保持不变
    • 感谢您的评价,但恐怕您有问题。该组件仍处于 legacy 状态:docs.unity3d.com/Manual/class-Animation.html。此页面上也对此进行了描述:docs.unity3d.com/Manual/AnimationOverview.html
    猜你喜欢
    • 2019-09-05
    • 2014-09-03
    • 1970-01-01
    • 2022-07-13
    • 2018-04-06
    • 2022-01-15
    • 2021-05-17
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多