【问题标题】:How to prefab animations in Unity?如何在 Unity 中预制动画?
【发布时间】:2019-04-17 02:26:44
【问题描述】:

为门创建了一个预制件并将预制门添加到场景中。这个预制门有一个动画师。问题是当我尝试更改场景中第二扇门上的动画器 x、y、z 位置时,它会更改第一扇门。

我尝试复制门并更改 x y z 位置,但它改变了第一扇门的动画师。

我只有一个播放动画师的脚本。

预期的结果应该是我可以根据需要拖放门,而无需为每个门创建单独的动画师。看起来我需要为每扇门创建动画师,而且这可能需要我为每扇门创建新脚本。这似乎很尴尬,因为我应该能够添加门并且只需在动画师中更改位置 x y z。

【问题讨论】:

  • 大家一起工作? - 这就是问题所在?

标签: unity3d


【解决方案1】:

问题在于他们的Animator 组件使用相同的AnimatorController 资产,该资产使用某些AnimationClip 资产引用来表示其状态。

我不知道是否有更简单的实现方法,但我会执行以下操作:

  • 对于您想要的内容,您必须复制 AnimatorController 资产 (CTRL+D) 以及要更改的 AnimationClip 资产。

  • 然后在克隆的AnimatorController 中单击要更改的相应状态,并在检查器中引用相应的克隆AnimationClip

  • 现在您有一个 AnimatorController 的副本,使用不同的 AnimationClip,但具有相同的状态、传统等,因此您可以单独编辑动画和控制器。

  • 最后在Animator 组件中为每个预制件引用相应的AnimatorController

现在剩下的问题可能是,对于未来,如果您更改状态、转换,尤其是参数,您必须分别在 AnimatorController 资产中执行此操作。

【讨论】:

  • 我明白了。哇,我简直不敢相信如此常见的事情没有简单的解决方法。我还想到在我的脚本中让动画师的名称与游戏对象的名称相匹配,然后我只需要为每个门创建一个动画师,动画师就像 doorOpendoor1 doorOpendoor2 等。连接名称我不会有问题冲突的动画师。你怎么看?
  • 对不起,我没听懂这个问题。如前所述,核心元素不是Animator,而是AnimatorControllers 和AnimationClips。是的,我通常根据对象名称来称呼它们,以免混淆它们并将所有特定动画剪辑打包到一个相同命名的文件夹中;)但是,您知道,只有当您希望这些门具有不同的行为时才需要它。如果您更改所有这些的主要原因实际上只是世界中不同的位置和旋转,而是给它们一个父对象并定位/旋转那个对象;)
【解决方案2】:

这可能不是因为动画师,而是 Unity 中动画的特定行为。据我了解,动画根据父级为变换属性设置动画。所以你的 prefab 的第一个父级被捕获,它的 transform 属性用于动画。但我不太确定这个解释——实际行为包含在 Unity 的源代码中。我发现的一个常见解决方案是在对象的预制件中创建父级或容器。我不知道为什么它有效,但它有效。也许是因为您的动画对象的父对象现在总是相同的。

Parent 可以只是一个空的游戏对象。因此,您制作了门预制件,将另一个空游戏对象放入此预制件中,使您的门成为此容器的子项,根据容器和容器本身将门的所有坐标设置为 0。现在您可以将动画组件添加到您想要动画的对象(不是容器),并在预制场景中对其进行动画处理。之后,您可以将这个预制件的副本(容器 + 您的动画对象)放置在游戏场景中的任何位置 - 副本的所有动画都将独立进行。

【讨论】:

    猜你喜欢
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    相关资源
    最近更新 更多