【动画】Unity2D骨骼动画-Animation2D
骨骼动画原理
- 叫骨骼蒙皮动画或者矩阵变换动画更贴切
- 骨骼动画 = transform动画 + 骨骼顶点变换 + 渲染模型
- KeyframeAnimation(transform节点),
- 骨骼引起的顶点变换(bone,mesh)
- draw mesh
动画驱动
- Animation控制transform,transform提供了骨头的矩阵,连续的keyframe控制骨头的位置,让每个精灵分块动了起来;
- 骨头影响顶点变换,顶点动起来
- 形成了动画
顶点变换
使用骨骼影响顶点的移动
方式1:gpu
着色器顶点函数里获得骨骼的矩阵对顶点做变换
方式2:cpu
cpu里修改mesh顶点,这个动画复杂,模型复杂会卡
贴图
蒙皮,即把图片盖在模型上,使用某个精灵生成网格,每个顶点自动对应到texture某个uv坐标,编辑器下完成,美术的活
骨骼
- 骨骼 = 所有骨头
- 每个骨头都记录顶点和变换矩阵的关系,骨头有父子关系,在unity的形式为Transform节点
骨骼和顶点绑定的方法
在某一顶点区域创建骨头,那么这个区域的顶点都收到这个骨头的影响。骨头的影响范围可以调整。顶点最多可以受到n个骨头影响,游戏里一般是4个。
切块
精灵中不相连的部分都可以算作一个独立的块,也可以在制作的时候自定义切块,一般这些切块是人性骨骼的躯干、头部、四肢、武器
unity animation2D的接口
- 编辑器导出unity资源:skeletonEditor.export()
- 导出的资源:Animator + Animation + Sprite + GameObject
源码
入口类
SpriteSkin,对应编辑器SpriteSkinEditor,LateUpdate
Boner2D
利用SkinnedMeshRenderer的特性,构造其需要的参数,骨骼权重,骨骼位置,骨骼动画的计算这个库交给SkinnedMeshRenderer处理了