Unity5.x Mecanim Animator使用详解

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),只修改本动画的属性,即只对本动画有效。


转载:http://blog.csdn.net/myarrow/article/details/45242403

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本书对Unity 3D集成开发环境界面、脚本的编写和众多高级特效的实现进行了详细介绍,内容深入浅出,是一本适合不同需求、不同开发水平读者的技术宝典。 全书共分16章。第1章主要介绍了Unity 3D的诞生、特点、开发环境的搭建及运行机制;第2章对Unity 3D集成开发环境进行了详细介绍;第3章介绍了Unity 3D中脚本的编写;第4章主要对Unity 3D开发过程中经常使用的组件及对象进行了详细介绍;第5章介绍了Unity游戏开发中非常流行的第三方UI界面开发组件库—NGUI的基础知识;第6章介绍了Unity开发平台的完整的物理引擎体系;第7章介绍了Unity 3D中的着色器和着色器语言—ShaderLab;第8章介绍了天空盒、虚拟按钮与摇杆、声音、水特效、3D拾取、重力加速度传感器及雾特效等开发常用的技术;第9章介绍了Unity中经常使用的光影效果,主要包括各种光源、光照烘焙、法线贴图、镜面特效、波动水面真实效果等技术;第10章介绍了Unity中模型的网格概念及新旧动画系统;第11章介绍了Unity自带的地形引擎、拖尾渲染及导航网格和寻路系统等知识;第12章介绍了AssetBundle更新资源包的使用;第13章介绍了Unity中的多线程技术与网络开发;第14章介绍了Unity 2D游戏开发工具;第15章介绍了Unity 3D提供的Profiler工具的使用方法,及断点调试的两种方式;第16章介绍了完整的大型3D游戏案例—指间足球。
Unity 5.x 3D游戏开发技术详解与典型案例工具书素材》是一本关于使用Unity 5.x引擎进行3D游戏开发的工具书,该书旨在为开发者提供详尽的技术解读和实践案例。 该书的素材包括了Unity 5.x引擎的详细介绍和使用方法,以及应用于典型案例中的各种游戏开发技术。其中,对Unity 5.x引擎的介绍包括了其基础概念、界面布局、编辑器功能等。此外,该书还深入讲解了Unity 5.x中的各种特性,如3D模型导入、材质设置、场景构建、动画制作等。这些内容为读者提供了全面的了解和掌握Unity 5.x引擎的基本操作和高级功能。 而针对3D游戏开发技术,该书通过典型案例的方式进行讲解,涵盖了游戏开发的各个方面。以此,读者可以通过实践案例来学习和运用Unity 5.x引擎的各种技巧和技术。这些实例包括了角色控制、碰撞检测、粒子特效、音效处理、UI设计等等。通过分析这些案例,读者可以深入理解和应用Unity 5.x引擎在3D游戏开发中的各种实践技术。 这本工具书素材的特点在于:一方面,它提供了全面而细致的Unity 5.x引擎的技术详解,包括基础知识和高级技巧;另一方面,它采用了实践案例的方式,通过具体的开发示例,帮助读者更好地理解和掌握Unity 5.x的开发方法。 总之,通过《Unity 5.x 3D游戏开发技术详解与典型案例工具书素材》,读者可以系统地学习和掌握Unity 5.x引擎的开发技术,以及在实践中的应用。这本工具书素材是一个理想的学习指南和实践参考,对于想要从事3D游戏开发的开发者来说,具有很高的参考价值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值