上一篇,我们初步了解了一下Mecanim的部分很基础的类容,我以一个疑问的形式结尾。这次我来揭晓此问题的答案,其实很简单,上次的警告如下:
警告的大概意思是:用在Animator Controller中的Animation clips需要有在检视面板中被设置了Muscle(肌肉)的这个步骤。
我的英文很烂,但我可以知道这句话的含义,就是我们的用到的这个Animation Clip必须是已经产生了Avatar的模型中的Animation
Clip。由于我们当前只将第一个Robot生成了Avatar,所以现在我们必须将每个Robot都来一次Rigging,也就是让每个Robot的FBX文件中产生Avatar。这让人觉得难以接受,但如果我们的Robot的动画导入方式是单个文件分割的方式的话就很简单了。我后来想了想,现在我们介绍一下Mecanim的核心功能->动画重定向应该足够合适了。那好吧!我们开始吧!
首先我们先进入AssetStore中下一个东西:Mecanim Animation Starter Pack(注意,AssetStore类里面有很多免费的资源供我们下载学习,但我们得先注册一个账号)。
这个包可是一个伟大的包,我们接下来的例子将会充分用到它。注意:AssetStore上下载的包的源文件并不在Unity的安装目录下,一般的地址为:C:UsersAdministratorAppDataRoamingUnityAsset Store。为了让我们更能理解Mecanim动画系统的强大功能,我们还得下载一个模型Soldier,当然,也是在AssetStore中:
注意,此Solider中是不带任何动画文件的,但Mecanim可以通过动画重定向来让Solider动起来。下面我们新建一个工程,取名为:Mecanim2。然后将我们下载好的两个包都导进来。按照上一篇所讲的,我们先生成Solider的Avatar(上面这两个包包含两个FBX文件,一个是Solider,另一个是swat)。然后新建一个AnimationController,名为Solider1。
随后我们先看看我们导入的那些带有Avatar的动画的FBX文件,如下:
我们还是新建两个动画状态:idle***n。这回,我们试着将那些个带有Avatar的动画片段中寻找两个有关idle***n的动画片段分别拖到两个动画状态对应的Motion上,这次我们发现可以拖到个位置去了。果然印证了我在开篇提出的那个结论。
我们接下来在两个动画状态之间建立动画转换(Animation Transitions)。如下图:
然后我们单击从idle***n状态的那个箭头。在Inspector面板上我们看到了这个:
我用红线标注了的这部分是我们接下来进行状态转换的关键。这时我们必须借助于Animation Parameters了。新建一个名为Speed的Float的Animation Parameters(上一篇我有介绍)。然后我们在那个红线标注的位置单击下拉条,选中Speed,然后我们发现这部分出现了一点点变化:
第二个下拉选项卡有两个选择项,分别为:Greater与Less。我在第三个选项中填写了0.1,这样做的目的是:如果Speed大于0.1,执行此转换,也就是动画状态从idle切换***n。这一点很重要,主要体现在我们的脚本书写上。
到此我们的简单的从idle***n的动画控制器就做好了。我们拖拽Solider到Scene视图中,然后将我们刚才制作的Animation Controller多拽到Solider对应的Inspector面板中的Animator的指定的位置上,就像这:
注意:此Animator组件中的Apply Root Motion选项如果我们勾选了的话,当播放动画时是通过动画运动的幅度来改变角色的Transform的,如果我们不勾选,我们就可以用脚本设定此角色的Tranform。这样说或许有点难以理解。放心吧,下面我们会证明这一点的。
我们还是建一个平面来盛放Solider,并且为Solider加一个角色控制器并适当调节一下胶囊体的大小和位置。
完成之后我们运行一下试试,由于此时我们并没有通过脚本来动态的控制Solider的动画状态的切换,所以Solider会播放默认的动画:idle。截图如下:
我们看到这是Solider站立了一会,而且转动了一个方向并摆了一个poss。我们终于让一个没带任何Animation Clips的角色动了起来。这就是Mecanim的强大的动画重定向功能,他能将一个角色的动画附加到另一个角色身上,这是在以前版本的Unity中从没出现过的。有了这种功能,美术就可以极大地减轻工作量。但是我们的好戏还没完呢!我们必须通过脚本来实现动画状体的切换。于是,我们得新建一个脚本,取名为:FirstMecanimScript。
我简单的写几句代码如下:
using UnityEngine;
using System.Collections;
public class FirstMecnimScript : MonoBehaviour {
private Animator animator;
private float v;
// Use this for initialization
void Start () {
animator = gameObject.GetComponent();
}
// Update is called once per frame
void Update () {
v = Input.GetAxis("Vertical");
animator.SetFloat("Speed",v);
代码异常简单,也就是说如果我们按下竖直方向键时,当偏移量大于0.1(我们定义的Speed的临界点为0.1)时,动化状态马上从idle转换***n状态:
功能确实达到了,但是还得注意一点,就是我之前强调的,如果在Animator中我们勾选了Apply Root Motion,我们不必修改角色的Transform,依靠角色的动作本身的设计就能改变角色的Transform。但是如果我们没有勾选它,那我们就只能依靠程序来动态的改变其Transform,就像老式的动画系统一样。好了,这个问题读者可以亲自去检验一下。这次我们怎么也体会到Mecanim的动画重定向功能的强大了,可我们还没有结束呢!接下来我们还有IK,动画混合树等类容需要我们去探寻。因此,我的下一篇文章,敬请期待!Unity3d 4.0新动画系统Mecanim用法(二)
原文:http://my.oschina.net/u/185335/blog/337900