是否可以在 Unity 中获取精灵表动画的当前帧?

Posted

技术标签:

【中文标题】是否可以在 Unity 中获取精灵表动画的当前帧?【英文标题】:Is it possible to get the current frame of a sprite sheet animation in Unity? 【发布时间】:2020-08-29 22:48:26 【问题描述】:

我在 Unity (2019.2.21f1) 中有一个简单的 12 帧 2D 精灵动画,我通过制作精灵表并使用 Unity 精灵编辑器将精灵表分割成动画的各个帧来创建它。

我想在动画的第 3、7 和 10 帧上执行某些代码。

是否有可能在代码 (C#) 中获取当前正在动画中显示的帧?或者是否有其他方法可以在显示第 3、7 或 10 帧时执行代码?

【问题讨论】:

使用动画事件。 docs.unity3d.com/Manual/script-AnimationWindowEvent.html 嗨 Ben Rubin,应该可以,谢谢 :) 如果您愿意将此作为答案,我很乐意接受 - 它不会直接回答标题中的问题,但是它回答了我的 OP 最后一句话中的问题,并为我提供了我想要的功能。 很高兴听到它解决了您的问题,我会发布它作为答案。 【参考方案1】:

您可以确定第三帧何时纯在代码中运行,但推荐(而且更简单)的方法是使用 Animation Events。

下面是在动画的第三帧调用一些代码的示例。我圈出了您必须单击以添加动画事件的按钮。添加事件后,将其拖到您希望它执行的帧或时间(也圈出)。然后点击动画事件并输入事件执行时要调用的函数的名称。您可以选择将参数传递给您的函数,方法是在函数名称下方输入参数。

当事件触发时,它会在附加到同一个游戏对象的脚本上查找该函数。然后你可以在这个函数中做任何你想做的事情。如果您在其中一个名称中有拼写错误,或者您的游戏对象没有附加匹配的函数,那么当该事件触发时,您将在 Unity 编辑器中收到错误消息。

我下面的例子会在动画到达第三帧时调用DoSomethingOnThirdFrame

【讨论】:

以上是关于是否可以在 Unity 中获取精灵表动画的当前帧?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unity 上更改 2D 动画中精灵之间的时间?

更改正在动画的精灵表时 HTML5 Canvas 挂起(逐帧播放视频)

Unity2D像素游戏开发——Aseprite简单人物绘画+动画制作导出精灵表示例

在Unity中使用不带动画的动画制作多个精灵

创建智能和快速的精灵表

在 Unity 中来自 spritesheet 的动画异相