如何在Unity中对多个对象使用相同的动画剪辑?

0 c# unity-game-engine

我有 2 个简单的按钮,每 10 秒我希望其中一个按钮产生动画(沿 X 轴左右摇动)仅 2 秒。

2 按钮图像

因此,我在 Unity 中创建了一个动画控制器和一个动画剪辑,用于第一个按钮上的摇动动画,效果很好,但对于第二个按钮,出现了问题,因为第二个按钮捕捉到第一个按钮的位置,然后应用动画。

现在我知道是什么导致了这个问题,在动画剪辑中,我将第 一个按钮从其 X 位置 (X = 413) 左右移动,而第二个按钮的X 位置是 (X = 640),这意味着第二个按钮按钮将捕捉到 (X = 413) 以应用动画。

我的问题是:是否可以将相同的动画剪辑应用于不同的对象?或者我必须使用其他软件创建动画剪辑并统一使用它?

Dar*_*ane 5

是否可以将相同的动画剪辑应用于不同的对象?

是的。

但是,如果没有看到您的代码和确切的设置,就很难为您的问题提供可靠的解决方案。但是,我相当有信心您的问题与我最近遇到的问题完全相同。

在给你解决方案之前,请允许我解释一下问题的原因(假设我们正在讨论同一个问题):

当你为一个对象设置动画时,为了论证起见,假设position一个Transform组件,你绝对是在为它设置动画。换句话说,如果关键帧将变换沿 x 轴移动“5”,则真正发生不是相对移动,而是绝对移动,其中“5”绝对添加到当前位置。

因此,如果起始位置是 (125, 0),则在本例中动画会将其保留为 (130, 0)(因为我们在 x 上移动“5”)。如果您随后决定要将动画对象移动到屏幕上的其他位置,例如 (250, 0),您会发现一旦此动画开始播放,它会将对象捕捉回 (125, 0) 播放动画。

您可能会猜到,会发生这种情况是因为动画中的第一个关键帧声明该位置位于 (125, 0)。它不关心(甚至不知道)对象本身现在位于 (250 ,0)。

我知道您在问题中谈到了这一点,但我只是想尽可能清楚地说明这一点。

好的,希望我已经解释了问题的原因,现在寻求解决方案:

将空对象设置GameObject为您尝试设置动画的对象的父级。

完成此操作后,当您为按钮的位置设置动画时,移动将是对于父级而不是绝对的。

注意:在此更改后,您可能需要重做动画,以使按钮从 (0, 0) 变为 (5, 0)。然后,当您添加更多按钮时,您可以重用动画,只需确保它们是另一个按钮的父级GameObject并位于 (0, 0)。