Animation遇到的小坑及简单的Animator使用

时间:2024-04-04 11:30:46

Animation属于Unity比较早的动画组件,这里它具体的使用方法就不在介绍,百度、Google、bing可以搜到一大堆教程,这里我想说一下我遇到的两个小坑。

1. Marked as Legacy

相信不少人在创建好Animation Clip后,将它拖到Animation组件上,会有这样一句警告。
Animation遇到的小坑及简单的Animator使用
这里的意思是Animation组件如果要使用AnimationClip的话,那么这个Animation Clip需要被标记为Legacy,但是这个Legacy在哪里,初学者可能会比较懵逼。如图所示,将显示模式切换为Debug模式。
Animation遇到的小坑及简单的Animator使用
将选中的Animation Clip切换到Debug模式之后,勾选箭头所指的选项,该AnimationClip即可被Animation组件使用。

2. 动画切换时的错乱

在使用Animation组件时,如果一个Clip中有控制物体的显隐、位移、缩放等,就会很容易出现问题。这里我做了一个简单的例子。
Animation遇到的小坑及简单的Animator使用
两个AnimationClip分别是对Cube的显隐和位移的单独控制,即位移动画只有位移,显隐动画只有显隐。在播放位移动画时,切换到显隐动画,Cube并没有回到初始位置,这时再切换到位移动画时,Cube已经不再出现。
对于这种问题,我个人认为两种解决办法,一个是在AnimationClip中添加对应的属性,即位移动画开始对物体的显隐进行控制,显隐动画的第一帧对位移进行重置,这种方法需要美术人员在K动画的时候多上点心。另一种方法,既然两种动画的初始状态都是相同的,那么,我们在进行动画切换的逻辑中进行处理,在某个动画结束时,回到该动画的初始帧,再播放另一个动画,使用Animation[animationClip].time=0;进行设置。
另外还有一种处理方法,就是将Animation组件换为Animator组件,这里虽然不清楚什么原理,但是Animator确实能处理好动画的切换状态。
Animation遇到的小坑及简单的Animator使用
Animator的状态机如下。
Animation遇到的小坑及简单的Animator使用
最后再放上两者的代码,其实基本一样样的。
Animation遇到的小坑及简单的Animator使用


Animator Override Controller

同样是动画系统,Animator Override Controller我个人用的不算太多,所以就懒得再另写一篇,就在这里简单写一下,如果以后有需要,会再写一篇详细的。
在C#语法中,看到override这个词,一般是子类继承父类,对父类的虚方法进行重写。这里同理,Animator Override Controller相当于对一个已知的Animator Controller进行重写,不改变其状态机的逻辑,只改变其上的动画。比如游戏中存在众多的NPC,每个NPC都有Idle、Walk、Run等动画,但他们的这些动画又都不一样,这里我们就可以先创建一个Animator Controller,将动画状态机编写好,再使用Animator Override Controller对不同NPC使用不同的动画。如下,分别是创建的NPC Animator属性。
Animation遇到的小坑及简单的Animator使用

Animation遇到的小坑及简单的Animator使用

Animation遇到的小坑及简单的Animator使用

然后我们假设有一个NPC名为God,创建一个Animator Override Controller,如图。
Animation遇到的小坑及简单的Animator使用

Animation遇到的小坑及简单的Animator使用
将编写好的AnimatorController拖到NPC_God的Controller中,下边会自动弹出需要Override的动画选项,我们只要将God的动画一一拖入即可。


这篇博客简单介绍了一下Aniamation和Animator,emmm。。。。确实够简单的,如果有什么问题或者高见,欢迎下方评论留言!

如果想细致的学习Unity的动画系统,推荐这位dalao的博客。
http://www.cnblogs.com/hammerc/p/4825877.html


最后,二哈镇博。
Animation遇到的小坑及简单的Animator使用