http://www.narkii.com/club/thread-305706-1.html

2013-10-9 01:15 上传

下载附件 (78.65
KB)

导读:
五分钟了解Mecanim角色动画系统 
http://www.narkii.com/club/thread-305414-1.html

Mecanim动画系统 - 使用Blend Trees控制角色动作
http://www.narkii.com/club/thread-305557-1.html

在前面的教程里面,我们已经了解到Mecanim的基本操作与Blend Trees的结合用法,如图所示,目前在角色已经设置了Idle与Move的动作,通过键盘的操作可以在场景中对角色进行前后左右与加速的控制。

 

有的朋友可能还注意到一个情况,就是角色在移动的过程中,如果需要进行类似投弹与射击的动作,由于角色仍然处于行进的过程,在这种情况下,用传统的动画控制方式是无法达到这种效果,此时就需要使用动画层的叠加方式来制作,而使用Mecanim系统正是一个最理想的解决方案。

接下来的部分,我们将介绍如何使用Mask功能在角色上叠加不同的动画,延续前面的Blend Trees教程,在导入附件的资源包后,打开Mixing Layers的场景,选择zModified_Character > Swat@firing_rifle文件,这是一个模拟士兵角色射击的动作。

 

将Rig模式切换为Humanoid,Avatar Definition选择CopyFromOtherAvatar,然后在Source里面添加SwatAvatar,按下Apply完成设置。

 

接着在Animations里面进行属性设置,勾选Loop Pose与Root Transform Rotation > Bake into Pose、Root Transform Position > Bake into Pose这三个选项,Base Upon分别为Body Orientation与Original,最后再按下Clamp
Range完成动作的分割即可。

 

选择Swat@toss_grenade文件,同样的将Rig模式切换为Humanoid,Avatar Definition选择CopyFromOtherAvatar,在Source里面添加SwatAvatar后按下Apply完成设置。

在Animations里面不需要勾选Loop Pose,因为Swat@toss_grenade是一个模拟投弹的动作,只需勾选Root Transform Rotation > Bake into Pose、Root Transform Position > Bake into Pose这两个选项即可,最后再按下Clamp
Range完成动作的分割。

 

在Project目录里面增加一个Avatar Body Bask,然后将其名称更换为Body Mask,如图所示:

 

将Body Mask的显示窗口内,选择人物的下半部使其成为红色,被选择的部分表示该骨架为锁定状态,也就表示在新增的动作图层内只会影响角色的上半身。

 

接着按下Layers右边的+号按钮新增一个动画图层。

 

将新增的图层更名为UpperBody,在Mask的栏位里面添加刚才建立的BodyMask,如图所示:

 

现在开始进行新图层的动作设置,按下右键新增三个空白的Empty,然后将其名称修改为Fire、Null、Grenade,如图所示:

 

按下Parameters右边的加号新增两个Bool的判断式,分别是Fire与Grenade。

 

选择Fire,在Motion的栏位内将设置好的Swat@firing_rifle动作文件添加进来,如图所示:

 

选择Grenade,在Motion的栏位内将设置好的Swat@toss_grenade动作文件添加进来,如图所示:

 

选择Null,按右键选择Make Transition后连接到Fire, 选取连接线,在Conditions的设置里面将条件更换为Fire、ture的选项,如图所示:

 

选择Null,按右键选择Make Transition后连接到Grenade, 选取连接线,在Conditions的设置里面将条件更换为Grenade、ture的选项,如图所示:

 

接下来,选择Fire,使用右键选择Make Transition后连接到Null, Grenade也是采用相同的方法进行连接,如图所示:

 

选取Fire到Null方向的连接线,在Conditions的设置里面将条件更换为 Fire、false选项。

 

选取Grenade到Null方向的连接线,在Conditions的设置里面将条件更换为 Exit Time、0.92的数值。

 

最后打开BasicController02脚本,在update()的底部加上一段控制的代码:

  1. if(Input.GetKeyDown(KeyCode.F)){
  2. animator.SetBool("Grenade", true);
  3. } else {
  4. animator.SetBool("Grenade", false);
  5. }
  6. if(Input.GetButtonDown("Fire1")){
  7. animator.SetBool("Fire", true);
  8. }
  9. if(Input.GetButtonUp("Fire1")){
  10. animator.SetBool("Fire", false);
  11. }

复制代码

在上面的代码中,我们设置了按下F键即可执行投弹,如按下左键则是进行射击的动作,按下Play进行测试,使用WASD进行方向的控制,在行进的过程中按下F键则执行投弹的动作,这时可注意到士兵模型的上半身与下半部是用了不同的动作图层所结合的动作,也就实现了一边走路一边投弹的效果。

 
 
 

更多的Unity技术交流与分享请加入:纳金网Unity论坛专属交流群 - 218689657

Mecanim动画系统 - 在角色上使用Mask 叠加动画层的更多相关文章

  1. UnityError 动画系统中anystate跳转重复播放当前动画解决方案

  2. [Unity3D]Unity3D圣骑士当游戏开发商遭遇Mecanim动画系统

            大家好.我是秦培.欢迎关注我的博客.我的博客地址blog.csdn.net/qinyuanpei. 博主总算赶在这个月底写出了这篇文章.这个月由于期末考试一直没时间研究太多关于技术方面 ...

  3. [Unity3D]Unity4全新的动画系统Mecanim

    Unity4.X添加一个新的动画系统,以取代原有的3.X旧的动画系统,全新的动画系统Mecanim是官方推荐,它使我们能够写更少的代码实现连续动画. 效果图 Unity3.X中动画系统播放动画 使用播 ...

  4. unity 对Animator动画系统的研究

    unity的新动画系统叫Mecanim,使用Animator来取代旧系统Animation,按Unity文档的惯例:知识点主要分2部分:unity manual和unity script,读者可以边看 ...

  5. Unity 动画系统

    Legacy动画系统:Animation组件(旧) Mecanim动画系统:Animator组件(新) 动画播放过程: //动画片段 [System.Serializable] public clas ...

  6. 关于Unity中旧版动画系统的使用

    Unity在5.X以后,有一个旧版的动画系统和新版的动画系统. 新版的动画系统是使用Unity动画编辑器来调的,调动画和控制动画 旧版的动画系统是用其他的第三方软件调好后导出到一个FBX文件里面,就是 ...

  7. 五分钟了解Mecanim角色动画系统

    http://www.narkii.com/club/thread-305414-1.html Unity 4.0推出的Mecanim动画系统已经有一段时间,不过据了解很多的朋友仍然在使用原来的角色动 ...

  8. Unity3D Mecanim 动画系统骨骼动画问题解决方法

    http://7dot9.com/2014/08/16/unity3d-mecanim%E5%8A%A8%E7%94%BB%E7%B3%BB%E7%BB%9F%E9%AA%A8%E9%AA%BC%E5 ...

  9. Unity3D之Mecanim动画系统学习笔记(五):Animator Controller

    简介 Animator Controller在Unity中是作为一种单独的配置文件存在的文件类型,其后缀为controller,Animator Controller包含了以下几种功能: 可以对多个动 ...

随机推荐

  1. java之冒泡排序

    //冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大 ...

  2. java代码中的三元表达式

    1.格式 布尔型表达式?a:b,例子:boolean c;int a=1,b=2;c=a>b?10:15,这样子最终返回的结果是15

  3. opencv配置指南

    今天配置了一把opencv,在vs2013,Python.IDEA(Java)上分别作了配置.总结成文档,分享给大家. 搭建opencv+vs2013的环境 安装opencv3.0 alpha 和 v ...

  4. OI中字符串读入和处理

    OI中字符串读入和处理 在NOIP的"大模拟"题中,往往要对字符串进行读入并处理,这些字符串有可能包含空格并以\n作为分割,传统的cin >> scanf() 等等,不 ...

  5. const位置上的不同代表哪些不同的意义

    const位置上的不同代表哪些不同的意义 exern的用法 这个可以引用在程序编译过程中编译进去的常量数据.换句话说正能在.h文件的声明赋值的常量才可以.并且常量的名字不能相同,如果相同会报错. 全局 ...

  6. 在react里面使用jquery插件

    在react里面使用jquery插件 背景: 虽然现在react,vue等框架开启了前端开发的新篇章, 但对于一些比较复杂的页面,比如想在项目里面生成 组织架构图,人员汇报关系等还是需要用到之前的 j ...

  7. angularjs ng-repeat倒叙

    <div ng-app="myApp" ng-controller="customersCtrl"> <table> <tr ng ...

  8. backbone测试代码

    一.入门测试 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  9. UESTC - 900 方老师炸弹 —— 割点

    题目链接:https://vjudge.net/problem/UESTC-900   方老师炸弹 Time Limit: 4000/2000MS (Java/Others)     Memory L ...

  10. Java线程池技术以及实现

    对于服务端而言,经常面对的是客户端传入的短小任务,需要服务端快速处理并返回结果.如果服务端每次接受一个客户端请求都创建一个线程然后处理请求返回数据,这在请求客户端数量少的阶段看起来是一个不错的选择,但 ...