Unity Animation与Animator的相互转换

近段时间使用Laya制作移植一款Unity的动作相关游戏,发现Laya对Unity的Animator的支持更好,但是游戏原作中,全使用的都是Animation,对技术难度和工作量进行评估后,我义无反顾的进入了漫漫填坑路:

文章中,我将不再对编辑器进行详细的讲述,直接谈API的转换,和相应的问题,比较优劣

1、IsPlaying 当前是否在播放某动画

注意事件:新动画的IsName函数一定得加,不然会判断成其它的,新动画在CrossFade一动画之后,这个判断会失效,而老动画是没有问题的,打个比方玩家在Run动画CrossFade到Walk动画时,Animation的IsPlaying(“Run”)和IsPlaying(“Walk”)返回的都是true。

而新动画无法做到,所以建议单独给新动画再封装一个播放类。

新动画   <   老动画


2、AnimationClip的动态添加与改变

添加Clip在新动画上是不被支持的,只支持改变动画;而改变在老动画上不支持

所以在Animator的编辑器中添加好些动画

Snipaste_2018-07-27_16-24-31如图,我们在Animator上添加的4个动画,我们动态改动

新动画   <=   老动画


3、动态的改变AnimationClip的速度

新动画仍然麻烦点,需要要编辑器里加入参数并设置:Snipaste_2018-07-27_16-35-34

两步,1,加入左边加入速度参数,2,在动画文件的右边文件挂接参数

代码就简单了:

这里不得不说如果不用动态改变速度的话,新动画无疑是比老动画强大的

新动画   <   老动画


4、Loop与ClampForever

这个是动画的模式,新动画在编辑器里面进行设置,老动画一样,代码上我没有深入研究,估计没有提供。

新动画   <   老动画


总结:

以上的使用,在代码的支持上,无疑是老动画更胜一筹。

Unity在对动画系统的升级上,更多的是将此系统专业化,也就是偏向了动画师的调整,这里说一些老动画没有的:

  1. 动画融合在编辑器中精确调整
  2. 动画的串连在编辑器中可以进行编辑
  3. 分层播放动画,例如人类角色上下半身播放不同的动画

前2条在老动画上只能通过代码实现,而第3条则全不支持。

新老动画的适合范围从上也可以方便比较出,如果你想代码量少而优雅,新动画系统完全可以满足你。此篇文章也是在API上做比较,不讨论新老动画在实际使用的好坏之比。

End~