• AnimatorController动画遮罩


    游戏中,我们的人物在某些时候,可能在一个时间点在做两件事,这样就需要同时播放两个动画,但我们肯定不能简单将其叠加,比如移动着开枪、攻击、挥手等等,那么在Unity中我们应该怎样实现这样的功能呢?且听我一一道来。

    现在我们要做一个移动中挥手的动画效果,当然,你也可以做成射击等,根据这个你得准备相应的动画片断哦。

    上次动画融合树的工程还在吧?我们在此基础上,加上按下V键挥手的效果。
    首先打开主角的动画状态机,在基本层BaseLayer下面添加一个层,取名叫做Wave吧,然后将层的权重Weight设置为1。
    之后我们需要为下面的Mask属性创建一个Avatar Mask,创建方法是在Project面板中右键选择Create选项卡下的AvatarMask,我们给它命名为WaveMask,选中它,在Inspector面板下,点击Humanoid倒三角,打开遮罩状态,可以看到我们的小人儿默认是全绿的,也就是没有遮罩,这里,我们只需要留下挥手动作(我的动作只需要右手),因此点击小人儿身上需要遮住的部分如下图:
    QQ截图20151007174004
    现在有了Mask,我们可以继续刚才的操作了,在动画层Wave中,将动画遮罩属性Mask指向我们刚才创建的AvatarMask。
    遮罩层建好了,首先添加一个Trigger参数Wave,之后再添加动画状态,在Wave层下添加一个空状态并设置为默认状态,然后再把我们的挥手动画状态添加进来,设置默认状态到Wave状态过渡条件为Wave,Wave状态到默认状态为无条件。

    最后打来我们之前的DearMove脚本,稍微加点料:

     1 using UnityEngine;
     2 using System.Collections;
     3 
     4 public class DearMove : MonoBehaviour
     5 {
     6     private Animator anim;   //动画状态机
     7     private int RunFloat;    //Run参数ID
     8     private int WaveTrigger; //Wave参数ID
     9     private float vertical;  //前进
    10 
    11     void Awake ()
    12     {
    13         anim = gameObject.GetComponent<Animator>();
    14         RunFloat = Animator.StringToHash("Run");
    15         WaveTrigger = Animator.StringToHash("Wave");
    16     }
    17     
    18     void Update ()
    19     {
    20         //呼叫方向控制
    21         vertical = Input.GetAxis("Vertical");
    22         //根据前进控制,设置Run参数的值,
    23         //后面两个参数可不加,这里是为了让从走到跑看得更明显
    24         anim.SetFloat(RunFloat, vertical, 1f, Time.deltaTime);
    25 
    26         if (Input.GetKeyDown(KeyCode.V))
    27         {
    28             Debug.Log("wave");
    29             anim.SetTrigger(WaveTrigger);
    30         }
    31     }
    32 }

    运行游戏,先让角色跑起来,然后按 V 键,我们的主角边跑边向我们挥手了哦!
    QQ截图20151007192459

  • 相关阅读:
    hdu 1251 字典树模板题 ---多串 查找单词出现次数
    一个极其简洁的Python网页抓取程序,自己主动从雅虎財经抓取股票数据
    JSONObject与JSONArray的使用
    关于DPM(Deformable Part Model)算法中模型结构的解释
    fullcalendar日历控件知识点集合
    android--自己定义ProgressDialog显示位置(其他Dialog子类都能够设置)
    最简单的Java框架
    java final keyword
    IBinder对象在进程间传递的形式(一)
    windows的定时任务设置
  • 原文地址:https://www.cnblogs.com/zhenlong/p/4870981.html
Copyright © 2020-2023  润新知