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

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)如下:

  1. using UnityEngine;
  2. using System.Collections;
  3. public class IdleRunJump : MonoBehaviour {
  4. protected Animator animator;
  5. public float DirectionDampTime = .25f;
  6. public bool ApplyGravity = true;
  7. // Use this for initialization
  8. void Start ()
  9. {
  10. animator = GetComponent<Animator>();
  11. if(animator.layerCount >= 2)
  12. animator.SetLayerWeight(1, 1);
  13. }
  14. // Update is called once per frame
  15. void Update ()
  16. {
  17. if (animator)
  18. {
  19. AnimatorStateInfo stateInfo = animator.GetCurrentAnimatorStateInfo(0);
  20. if (stateInfo.IsName("Base Layer.Run"))
  21. {
  22. if (Input.GetButton("Fire1")) animator.SetBool("Jump", true);
  23. }
  24. else
  25. {
  26. animator.SetBool("Jump", false);
  27. }
  28. if(Input.GetButtonDown("Fire2")&&animator.layerCount >= 2 )
  29. {
  30. animator.SetBool("Hi", !animator.GetBool("Hi"));
  31. }
  32. float h = Input.GetAxis("Horizontal");
  33. float v = Input.GetAxis("Vertical");
  34. animator.SetFloat("Speed", h*h+v*v);
  35. animator.SetFloat("Direction", h, DirectionDampTime, Time.deltaTime);
  36. }
  37. }
  38. }

6. 为Mecanim系统创建角色

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

1) 建模

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

2) 骨骼设置

3) 蒙皮

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

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

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

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

【转】Mecanim Animator使用详解的更多相关文章

  1. unity3D游戏开发之详解Animation类和Animator类

    详解Animator类和Animation类 链接: http://wenku.baidu.com/link?url=SiaUYcdrNYjOYrWVDJSKGAYdJOntMTOhsVJtyBk2i ...

  2. 动画_ _ Android应用开发之所有动画使用详解

    转载: http://blog.csdn.net/yanbober/article/details/46481171 题外话:有段时间没有更新博客了,这篇文章也是之前写了一半一直放在草稿箱,今天抽空把 ...

  3. Android中项目中各个文件夹的含义和用途详解

    1.src:存放所有的*.java源程序. 2.gen:为ADT插件自动生成的代码文件保存路径,里面的R.java将保存所有的资源ID. 3.assets:可以存放项目一些较大的资源文件,例如:图片. ...

  4. Android 三种动画详解

    [工匠若水 http://blog.csdn.net/yanbober 转载请注明出处.点我开始Android技术交流] 1 背景 不能只分析源码呀,分析的同时也要整理归纳基础知识,刚好有人微博私信让 ...

  5. [转]ANDROID L——Material Design详解(动画篇)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 转自:http://blog.csdn.net/a396901990/article/de ...

  6. 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高

    第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...

  7. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  8. Glide使用详解(一)

    一. 下载 在build.gradle中添加依赖: compile 'com.github.bumptech.glide:glide:3.7.0' 需要support-v4库的支持,如果你的项目没有s ...

  9. Android应用开发之所有动画使用详解

    题外话:有段时间没有更新博客了,这篇文章也是之前写了一半一直放在草稿箱,今天抽空把剩余的补上的.消失的这段时间真的好忙,节奏一下子有些适应不过来,早晨七点四十就得醒来,晚上九点四十才准备下班,好像最近 ...

随机推荐

  1. 一、CoreAnimation之图层树详解

    CoreAnimation :在字面意思为“核心动画”,但是如果您认为它仅仅是一个动画框架,那可能就要错过一些经典功能了.动画,只是CoreAnimation功能的一小部分,毕竟人家的源头是一个叫做L ...

  2. [转]字符编码笔记:ASCII,Unicode和UTF-8

    转自:http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 作者: 阮一峰 日期: 2007年10月28日 今天中午, ...

  3. CDN -- 集合

    weui https://cdnjs.cloudflare.com/ajax/libs/weui/0.4.3/style/weui.min.css 百度静态资源库 http://cdn.code.ba ...

  4. springBoot专题3---->springBoot与多数据源的配置

    最近有点忙,更新有点慢.今天进来说说一说springBoot中如何配置多数据源. 第一,新建一个名为springBoot-mutidata的maven项目,完整的pom.xml配置如下: <?x ...

  5. spring 的IoC的个人理解

    1.ioc IoC的概念介绍 ( a).依赖注入, 分为依赖 和 注入  , 其实依赖是一种耦合方式, 通过spirng在运行时将这种依赖关系完成, 达到解耦目的, 同时达到代码重用, 方便测试,更加 ...

  6. hashmap实现原理浅析

    看了下JAVA里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和Hash ...

  7. Power BI for Office 365(一)移动端应用

    此篇来自于微软商业智能网站的官方博客团队发布的Power BI在线资料其中的一部分,完整版地址: http://office.microsoft.com/en-us/office365-sharepo ...

  8. win10打开组策略提示命名空间已经被定义

    http://www.xitongcity.com/jiaocheng/win10jc_content_3629.html 最近有win10系统用户升级到10532版本时,无法打开组策略,弹出提示“命 ...

  9. jq switch case

    switch (cnt) {                    case ("string1"):                        ...             ...

  10. RUDP之三 —— Virtual Connection over UDP

    原文链接 原文:http://gafferongames.com/networking-for-game-programmers/virtual-connection-over-udp/ Introd ...