Unity精灵动画 2D碰撞

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity精灵动画 2D碰撞相关的知识,希望对你有一定的参考价值。

参考技术A

图片导入 设置等 :
常用的格式png jpg

将图片 textureType 设置为Sprite

将单个图片设置为 SpriteMode 设置为Single

将包含多个小图的一张大图 SpriteMode 设置为Multiple,在SpriteEditor中将素材进行切割,得到小的图片资源

PackingTag 进行精灵打包,减少资源大小,减少加载次数

GenerateMipMap (3D图片使用)牺牲CPU优化GPU,图片(大小)占用的内存增加33%左右,保存原图片的各种缩小图,在距离较远时,使用小图,来减少GPU的负担

Read/Write Enable 是否需要改图片

精灵动画 通过将多个精灵一起拖入Hierarchy进行创建精灵动画

SpriteRender :
OrderInLayer来控制渲染层级,数大的渲染在前面.

注意:在定项目之前定一个主分辨率

2D碰撞 条件和3D碰撞一样
给地形添加EdgeCollider地形碰撞
给玩家添加Rigidbody2D ,FreezeRotation -Z

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

【中文标题】是否可以在 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精灵动画 2D碰撞的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Unity3d 中最好地为 2D 精灵设置动画? [关闭]

Unity - 如何掩盖精灵网格内的精灵?

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

在 Unity 中为动画精灵添加帽子或皮肤

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

2D 对象碰撞 Unity