
AI
Unity的动画系统包含三大系统,分别是mecanim分层状态机、playable树状图执行流以及animationjob脚本化多线程骨骼级控制系统。mecanim状态机是基于clip级别的控制,不具备pose级别的控制能力。在进行分层控制时较为复杂,局部骨骼的控制也很棘手。它主要依靠statemachine behavior机制来扩展,从而实现对状态切换以及切换进度的控制。状态机能够嵌套进playable树状图中,如此一来,后续进行ik、pose控制等操作就可行了,并且还能在playable树中进行层动作混合。animationjob可以对每根骨骼进行单独控制,灵活性非常高。不过,状态机存在一些缺点,其内部如同黑盒,无法进行精细控制,只能在状态机输出之后再做后处理。而且状态机很难对脚步同步以及动作播放进度进行控制。playable只支持树状结构,同一个节点的输出无法复用,只能单一连接,不如流图灵活。animationjob则需要做大量工作,并且缺少数据配置等机制。实际操作中,对比Unreal的als或者lyra动画系统,就能发现Unity所缺失的功能。例如,
AImoffset可以通过加性和blendtree来模拟;pose需要利用animationclip playable来模拟;syncgroup没有简单的扩展方法;warp之类的可以通过statemachine behacior扩展或者用animation job控制;retarget系统可以在Unreal retarget处理完后导出给Unity使用;Unreal的子图扩展,在Unity中只能用override或者playable来扩展;Unreal的montage在Unity中需要像animancer之类的动态扩展才能播放动画。