unity的动画系统
- Animation
- Animator
- Playerable API
Animation一些细节
- 播放单个AnimationClip速度,Legacy Animation(老的动画版本,现在基本放弃了)系统更快。因为老的系统是直接采样曲线并直接写入对象Transfomr。这里说的是单个,而不是整体的AnimationClip
- 针对动画的缩放曲线比位移,选择矩阵开销更大,所以动画的缩放曲线尽量不要做
- 常数曲线不会每帧写入场景,更高效
Animator更新的流程
白色的部分是动画系统各个时段的回调,灰色的部分是动画系统的关键部分
最开始的是动画状态机的更新,接下来ProcessGraph是对所有的动画部分进行采样以及计算根骨动画,processAnimation是计算动画图层和结果,write Transfom是将动画写入到场景,WriteProperties是将主线中的动画属性写到动画对象上
Animator的一些细节
- 不要使用字符串来查询Animator-
- 使用曲线标记来处理动画时间
- 使用Target Marching函数来协助处理动画
- 将Animator的CullingMode(裁剪模式)设置成Based On Renderers来优化动画,并禁用SkinMesh Render的Update When Offscreen属性让角色不见时动画不更新
解决方案选择
- 一些简单,少量曲线动画可以使用Animation或动画区间库如果Dotween等完成。他们一般用作UI动画,Transform动画等
- 角色骨骼蒙皮动画如果骨骼较少,AnimationClip资源不多,对动画混合表现要求不高的项目可以采用Legacy Animation。
- 一些角色动画要求与逻辑有较高的交互,并且动画资源不多的项目可以直接用AnimatorGraph完成
- 一些动作游戏,对动画混合要求较高吗,有一些高级动画效果要求,动画资源量庞大的项目,建议才有Animator + playable Api(此部分没有讲 是因为我也不会也不懂)扩展Timeline的方式完成