Mecanim Animator使用详解

来源:互联网 发布:济宁淘宝培训 编辑:程序博客网 时间:2024/05/22 14:10

转载注明出处:点击打开链接

1. 简介

    Mecanim把游戏中的角色设计提高到了一个新的层次,使用Mecanim可以通过Retargeting(重定向)来提高角色动画的重用性。在处理人类角色动画时,用户可以使用动画状态机来处理动画之间的过渡及动画之间的逻辑。

   Mecanim支持运动重定向(Retargeting)功能:即把动画从一个角色模型应用到另一个角色模型上的功能。

 2. Animator关键元素

2.1 Animator组件

     有Animator动画的Gameobject必须有Animator组件,Animation组件如下图所示:

   

    Animator组件负责把动画分配给GameObject。Animator包含以下两个关键元素:
    1) Animator Controller
    2) Avatar (仅当GameObject是人形角色时,才定义Avatar)

    下图示意:一个游戏对象的Animator组件如何把Animation Clips、Animator Controller和Avatar资源组合在一起。


2.2 Avatar

    创建动画的一个基本步骤就是建立一个从Mecanim系统的简化人形骨架结构用户实际提供的骨架结构的映射,这种映射关系称为Avatar。


2.2.1 创建Avatar   

      创建Avatar是使用Mecanim的关键步骤。Avatar的创建过程,就是分析导入的角色资源的骨骼结构,其内部过程就是与Mecanim中已有的、简化的、标准的人类骨骼进行对比,最后将其转换或标识为Mecanim可以识别的骨骼结构。

      通过Avatar的创建,可以实现角色之间的Retargeting。

      1)导入角色模型文件(如FBX)之后,在Project窗口中选中导入的角色,然后在其Inspector窗口中指定模型的的Rig为Humanoid,然后点【Apply】按钮

         
   2)点【Apply】之后,Mecanim尝试把角色已经存在骨骼结构匹配到Avatar的骨骼结构(在大部分情况下,Mecanim能自动完成),如果匹配成功,在【Configure】旁边有一个“V”的符号,如下图所示: 


   3)在成功匹配之后,Avatar子资产被增加到模型资产的下面,其在Project窗口中如下图所示:


   4)选中Avatar子资产(如上图中的EthanAvatar),Inspector窗口如下图所示,点【Configure Avatar】之后,可配置Mapping和Muscles。


2.2.2 配置Avatar

      Avatar是Mecanim系统中极为重要的模块,因此为模型资源正确地设置Avatar也就变得至关重要。不管Avatar的自动创建是否成功,用户都需要进入到Configure Avatar界面中去确认Avatar的有效性,即确认用户提供的骨骼结构与Mecanim预定义的骨骼结构已经正确匹配起来,并且模型已经处于T形姿态。

      1) 实线圆圈:骨骼是必须匹配的

      2) 虚线圆圈:骨骼是可选匹配的
      可选匹配骨骼的运动会根据必须匹配骨骼的状态来自动插值计算。为了方便Mecanim进行骨骼匹配,用户提供的骨架中应包含所有必须匹配的骨骼。为了提高匹配的几率,应尽量通过骨骼代表的部位给骨骼命名(如:左手命名为LeftArm)。

      3) Avatar自动创建成功,其界面如下:


      4) Avatar自动创建失败,其 界面如下:


     5) Avatar Configure Inspector (骨骼映射)



    6) 如果auto-mapping(Mapping->Automap)部分或完全失败,可以在Scene中拖动骨骼以进行分配。如果Mecanim认为骨骼合理,则在Avatar Inspector中以绿色显示,否则以红色显示。


    7) 如果骨骼绑定正确,但是角色姿势不对(不是标准的T形),在Scene中可看到消息“Character not in T-Pose”,解决此问题可通过Pose->Enforce T-Pose或旋转其它的骨骼。

    

2.2.3 肌肉设定

       1) Mecanim允许使用“肌肉”来控制不同骨骼的运动范围。
       2) 当Avatar被创建且被成功配置之后,Mecanim可理解骨骼结构,且允许在Avatar Inspector的【Muscles】选项卡中调节相关参数。在此可以调整角色的运动范围,以确保骨骼运动起来真实、自然。

           详细使用方法参见:http://www.unitymanual.com/thread-1211-1-1.html

      3) 通过设置各个关节的旋转范围来控制不现骨骼的运动范围。

 

2.3 Animator Controller

     负责定义使用哪些动画素材,以及何时、如何播放(融合<blend>和过渡<transition>)这些动画素材。

      Animator Controller以状态机(State Machine)的方式维护一系列动画,且当隶属的角色发生特定事件时,切换播放的动画。

2.3.1 创建Animator Controller

      在Project窗口中,创建Animator Controller,然后双击刚创建的Animator Controller可在Animator窗口中进行编辑。创建Animator Controller如下图所示:



2.3.2 编辑Animator Controller

2.3.2.1 创建状态节点

         把Animation Clip从Project窗口中拖到Animator窗口,则自动创建了一个对应的状态节点,第一个拖入的Animation Clip为默认状态节点,如下图所示:



2.3.2.2 设置状态变换

        状态变换:即从一个状态变换到另一个状态,如从IdleShort状态变换到Jump状态。

2.3.2.2.1 角色自动运动

       简单且不用编程的状态变换,程序不能控制


        从一个状态变换到另一个状态的带箭头的线表示:这些箭头线用于设置变换条件,如:在什么条件下才从IdleShort状态变换到Jump状态。

       设置状态变换时,先选中箭头线,然后在Inspector中设置变换条件,如下图根据播放的百分比来设置变换条件。


       当IdleShort状态播放到90%时,则切换到Run状态。

       设置完之后,关闭Animator窗口中。至此,一个简单的且不用编程的Animator Controller已经设置完成。

2.3.2.2.2 程序控制角色运动

       1. 创建混合树

       1) 若一个状态节点支持多种运动(如:Run支持RunDirect、RunLeft、RunRight),选中此节点点右键,然后点【Create new BlendTree in State】,则此状态节点的Motion为:Blend Tree


      2) 创建BlendTree之后,双击此状态节点,则进入混合树的编辑。   

    3) 选中混合树,在其Inspector面板中,点按钮【+】然后点【Add Motion Field】增加3个Motion,然后并设置对应的Motion,其结果如下:


       2. 创建控制参数并设置变换条件

       1) 创建控制参数

       

       2) 设置箭头线变换条件

           首先选中箭头线,然后设置此箭头的变换条件。


      3) 设置混合树变换条件

      

     Direction:

          -1: 播放动画RunLeft

           0: 揪放动画Run

           1:播放动画RunRight

     Blend Type: 1D(表示一个参数控制混合树的动画播放) 

       

2.3.2.3 动画合成

     比如角色一边跑,一边挥剑,则需要把两个动画进行合成。要实现两个动画的合成,需要单独创建一个动画层。

    

   Weight:动画层的权重值

   Mask: 本层的动作影响身体的哪一部分(遮罩)

   1) 创建Avatar Mask:在Project窗口中创建一个Avatar Mask

   2) 点击不受影响的部位,使之变红,如下图只有右手的运动才参与计算,即只有右手的动作才发生作用,从而达到屏蔽身体其它部位的目的,从而提高了效率(IK:表示把风向动力学)

             

   3) 把Avatar Mask应用于特定的动画层

   4) 在脚本中设置状态变换条件,然后再把此脚本绑在角色身上。

   总结:一个Animator Controller中可包含多个动画层,每个动画层按照其设定的状态机单独进行运行,然后根据其Weight把各动画层进行合成,后面的动画层(除Base Layer)只显示其Avatar Mask绿色的部分。   

2.3.3 应用Animator Controller

        1) 在Hieratchy窗口中选择需要Animator动画的角色         

        2) 把Project中的Animator Controller资源拖到角色对象的Animator组件的Controller输入框,或点旁边的按钮进行选择

3. Animator重定向功能

        重定向功能:就是把应用在一个角色上的动作应用到另一个角色身上。

         即同一个Animator Controller可用于不同的Animators。

4. Animator详细参数

    Animator详细参数参见:http://docs.unity3d.com/ScriptReference/Animator.html

   http://edu.china.unity3d.com/learning_document/getData?file=/Manual/MecanimAnimationSystem.html

5. 设置动画状态过渡代码

   设置动画状态过渡代码例子(IdleRunJump.cs)如下: 

[csharp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class IdleRunJump : MonoBehaviour {  
  5.   
  6.   
  7.     protected Animator animator;  
  8.     public float DirectionDampTime = .25f;  
  9.     public bool ApplyGravity = true;   
  10.   
  11.     // Use this for initialization  
  12.     void Start ()   
  13.     {  
  14.         animator = GetComponent<Animator>();  
  15.           
  16.         if(animator.layerCount >= 2)  
  17.             animator.SetLayerWeight(1, 1);  
  18.     }  
  19.           
  20.     // Update is called once per frame  
  21.     void Update ()   
  22.     {  
  23.   
  24.         if (animator)  
  25.         {  
  26.             AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);            
  27.   
  28.             if (stateInfo.IsName("Base Layer.Run"))  
  29.             {  
  30.                 if (Input.GetButton("Fire1")) animator.SetBool("Jump"true);                  
  31.                     }  
  32.             else  
  33.             {  
  34.                 animator.SetBool("Jump"false);                  
  35.                  }  
  36.   
  37.             if(Input.GetButtonDown("Fire2")&&animator.layerCount >= 2 )  
  38.             {  
  39.                 animator.SetBool("Hi", !animator.GetBool("Hi"));  
  40.             }  
  41.               
  42.           
  43.                 float h = Input.GetAxis("Horizontal");  
  44.                 float v = Input.GetAxis("Vertical");  
  45.             animator.SetFloat("Speed", h*h+v*v);  
  46.                     animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);     
  47.         }               
  48.     }  
  49. }  

6. 为Mecanim系统创建角色

    为Mecanim系统创建角色主要包括以下三个阶段:

    1) 建模

         角色模型有合理的拓扑结构;模型导出设置;模型导入Unity3D;使角色处于T-Pose;去掉不需要的面、顶点及隐藏的面、顶点;

    2) 骨骼设置

    3) 蒙皮

         把多边形的网格顶点绑定到骨骼上的过程。

7. 肌肉设置与身体遮罩的区别

    1) 肌肉设置:是对Avatar进行设置,所以它修改了Avatar的输入设置,对所有动画有效。

    2) 身体遮罩:是对动画进行设置(每个Animation Clip有一个Body Mask),只修改本动画的属性,即只对本动画有效。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 哈罗单车账号被冻结怎么办 麻袋赚赚账号被冻结怎么办 网赌账号被冻结怎么办 梦想城镇账号被冻结怎么办 钱被银行冻结了怎么办 百度云账号密码忘了怎么办 微信钱包忘记密码了怎么办 word文档打开文件出错怎么办 有盘文件删不了怎么办 u盘文档严重损坏怎么办 wps文档打开是乱码怎么办 九游3083网资金冻结怎么办 阴阳师九游版禁止部分玩法怎么办 夜神模拟器游戏打不开怎么办 九游代金券锁定怎么办 被娱乐天地骗了怎么办 win8更新失败无法开机怎么办 安装英雄联盟文件损坏怎么办 电脑玩lol运行内存不足怎么办 守望先锋账号冻结了怎么办 守望先锋服务器发生意外错误怎么办 在先锋社保缺一年上学怎么办 lol更新后反应很慢怎么办 电脑跳舞毯不正常电脑游戏怎么办 PS中缺失的字体怎么办 黑板墙不想要了怎么办 淘宝代练打坏了怎么办 绝地求生与ipad不兼容怎么办 小米手机玩绝地求生卡怎么办 绝地求生服务器目前非常繁忙怎么办 玩绝地求生手机发烫怎么办 绝地求生刺激战场延迟高怎么办 怀孕八个半月打喷嚏头疼怎么办 20岁打喷嚏漏尿怎么办 鼻炎犯了不停打喷嚏怎么办 鼻炎犯了不停打喷嚏流鼻涕怎么办 感冒鼻痒怎么办小窍门 腰扭了屁股也疼怎么办 小三把房子过户怎么办 小三把房子卖了怎么办 打印机ip地址变了怎么办