Unity动画系统主要分为精灵动画(Sprite,帧动画)和骨骼动画(Spine)。常见的2D渲染组件一般包括SpriteRenderer和SpriteMask、SpriteEditor。动画系统(精灵动画)包含的组件则主要是Animation和Animator。
SortingLayer
表示当对象重叠时显示的先后顺序。越靠前的先渲染。
SpriteMask
控制一个Sprite只在另一个Sprite的范围内显示。
当场景内存在SpriteMask时,其他的SpriteRenderer可以在MaskRenderer选择和Mask的交互方式:不交互、罩内可见和罩外可见。
Sprite Editor
这个组件可以对2D精灵做出非常多的操作,例如切片,调整间距等等操作。
Animation
Animation通过间断或者连续的关键帧动画来进行管理。animation将不同的图片导入统一动画中会采用间断的关键帧,而对同一图片(精灵)进行操作时会进行连续的过度。在后一种情况下,如果改变了spriteRenderer的多个属性,可以在动画窗口中规定不同属性分别的变化方式。另外,还可以在关键帧处插入事件AnimationEvent,在动画播放到该关键帧时触发一些附加操作。例如,死亡时最后的关键帧销毁该对象并且隐藏精灵。等等。
Animator
Animator管理动画的状态切换和其中的逻辑顺序。Animator的管理方法类似一个状态机,包括Entry,Quit,Any state等等。其中anystate所绑定的逻辑对于任何都生效(例如死亡逻辑,在任何状态下都可能触发),Entry绑定的则是默认情况下的动画,例如移动。通过创建transition过渡;来说明切换的逻辑。可以在transition的检查器中设定切换速度和condition条件。condition条件可以由animation中规定的一些变量触发。这个可以在getcomponent<spriterenderer>.settype()在代码中改变。
总结
综合spriterenderer,spriteeditor和spriteMask,我们可以对对象的显示渲染做一些静态的操作;而通过animation和animator,我们可以对对象的显示和渲染做一些动态操作。这些组件不多,但是基本上占据了2D精灵动画的所有部分。
值得注意的是,由于在播放动画的时候物体碰撞箱会跟随,所以在实际操作中一般将sprite和collider分为两个子物体来操作。(但是这也产生了一些另外的bug且被玩家们熟知)。不论如何,还是分开的操作相对更好一些,它使得碰撞箱不会再被动画所束缚。