zoukankan      html  css  js  c++  java
  • Mecanim动画系统

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

    1.jpg 

    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的动作,通过键盘的操作可以在场景中对角色进行前后左右与加速的控制。

    2.jpg 

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

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

    3.jpg 

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

    4.jpg 

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

    5.jpg 

    选择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完成动作的分割。

    6.jpg 

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

    7.jpg 

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

    8.jpg 

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

    9.jpg 

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

    10.jpg 

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

    11.jpg 

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

    12.jpg 

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

    13.jpg 

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

    14.jpg 

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

    15.jpg 

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

    16.jpg 

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

    17.jpg 

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

    18.jpg 

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

    19.jpg 

    最后打开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键则执行投弹的动作,这时可注意到士兵模型的上半身与下半部是用了不同的动作图层所结合的动作,也就实现了一边走路一边投弹的效果。

    20.jpg 
    22.jpg 
    23.jpg 

    更多的Unity技术交流与分享请加入:纳金网Unity论坛专属交流群 - 218689657 
  • 相关阅读:
    几种常见SQL分页方式效率比较(转)
    jquery mobile开发笔记之Ajax提交数据(转)
    php 更新array键值
    PHP使用UTF8编码读取ACCESS的乱码问题解决方案(转)
    PropertyGrid控件动态生成属性及下拉菜单 (转)
    山穷水尽出高手,九死一生见功夫
    将MYSQL的GBK数据库转成_UTF-8数据库的简便方法
    CRM销售管理功能
    基于.net开发chrome核心浏览器【一】(转)
    1.Two Sum
  • 原文地址:https://www.cnblogs.com/nafio/p/9137476.html
Copyright © 2011-2022 走看看