介绍下Mecanim动画系统,它提供了更强大的功能,使用状态机控制动画逻辑,更容易实现动画过渡、动画retargeting(将一个动画使用到不同的模型上)等。
从网上找的3D模型FBX文件,包括了模型的动画文件,模型材质等,是一个完整的资源。新建unity工程,将模型文件导到Assets目录。选中模型,在Inspector窗体可见
Rig里我们可以设置动画类型,默认设为Generic。如果是要使用Mecanim提供的动画retargeting等功能,那就需要将动画类型设为Humanoid。要设置循环播放该动画,勾选Animations里Loop Time即可。
准备好模型后,创建一个动画控制器Animator Controller(如果是Legacy动画模式,不需要创建动画控制器。Legacy是4.0版本前的标准动画模式,功能较弱,使用也简单)。把模型拖到Scene里,给模型Animator组件的Controller指定动画控制器。如需使用脚本控制模型位置,取消Apply Root Motion选项。
打开Animator窗口,将之前导入的模型相关动画拖入窗口。
相关动画:
右击选中其中一个动画:
选择第二选项可设置默认初始动画。Make Transition可以建立动画之间产生过渡,操作很简单鼠标拉线连接动画即可。动画过渡到哪个动画取决于游戏需求咯。如下效果:
游戏中的动画播放是按逻辑或操作来控制的,比如鼠标左击我想看到指定的动画。我们可以按条件来过渡动画并使用脚本来控制。
在Animator窗体里选项Patameters里,我们可以创建不同类型数值,每个数值可以自己命名。加了几个操作如图
有了各参数名了,接下来设置动画过渡的条件了。选中Animator窗体里某动画,Inspector里选中各个Transitions,设置conditions。如idle过渡到run:
按照这样重复操作来设置其他动画过渡即可。
代码控制动画过渡。创建脚本并添加组建使作用到模型。首先获取动画组件this.GetComponent<Animator> ();通过动画组件可获得当前动画状态,并且可以设置动画过渡。下面代码用来控制鼠标左击由idle过渡到攻击动作:
攻击动作完了怎么判断?我想要攻击完了之后回到idle怎么办?
上面过程,在运行时候unity编辑器也给我们展示了整个流程,十分清晰!
左击反应