AnimatorController动画遮罩

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

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

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

现在有了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 键,我们的主角边跑边向我们挥手了哦!

时间: 2024-10-06 11:35:52

AnimatorController动画遮罩的相关文章

CSS3动画遮罩文字特效

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>CSS3动

AnimatorController动画融合树

通过Unity动画状态机,能帮我们轻松处理转换各个动画片断,达到想要的效果,但是如果仅仅是一个个动画的硬生生的切换,那么看起来就非常突然,而不真实了,在质量要求比较高的游戏中,特别是动作游戏,我们就不能直接简单地用Translation连起来了,而应该使用动画融合树. 准备工作:一个人物模型,一个待机动画,一个行走动画,一个奔跑动画. 通常游戏中,我们人物从待机到跑直接切换就行,今天我们加一个行走的过渡效果吧.创建一个动画控制器AnimatorController,将人物的Animator组件的

代码生成AnimatorController

0.出发点 现在的项目需要设置多套动画组合,全部是由策划在XML文件中设置完成,如果完全的手动在AnimatorController中去做不但工作量大而且如果将来有配置修改了还要一个个去找到对应的自状态机并且修改.因此就萌生了用代码去生成状态机的想法,而且在网上也有了很多的教程可以参考,只是每个项目都不同,且对于一些参数和属性的设置也不尽相同,因此还是把自己的代码进行一些修改后分享出来,基本上应该是包含了状态机常用的功能. 1.数据来源 一个典型的XML文件 <?xml version="

Unity3D之Mecanim动画系统学习笔记(八):Animator Layers(动画分层)

解决什么问题? 动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画.最好的例子就是Unity4.x自带的示例AngryBots了. Avatar Mask 下面我们就使用Avatar Mask来实现人物在奔跑中招手的效果. 我们先添加一个人物到场景,同时为其添加一个Animator Controller并设定好跳转条件,如下: 接下来我们添加下面的脚本来控制动画的播

ios遮罩层的简单使用

/** 大图 */ - (IBAction)bigImg { //1.添加按钮遮罩层 UIButton *cover=[[UIButton alloc] init]; cover.frame=self.view.bounds; cover.backgroundColor=[UIColor blackColor]; cover.alpha=0.0; [cover addTarget:self action:@selector(smallImg) forControlEvents:UIControl

10个web前端基于jQuery和css3动画插件及源码

1.jQuery横向手风琴图片展示插件 今天我们要来介绍一款非常酷的jQuery插件,它是一款横向的手风琴图片展示切换插件,每一张图片初始都是水平层叠在一起,点击图片后即可切换至下一张,并且在图片切换时出现水平移动的动画特效.另外你可以定义任意数量的图片应用在这个手风琴图片插件中. 在线演示 源码下载 2.纯css3实现的鼠标经过按钮特效 今天再给大家带来一款纯css3实现的鼠标经过按钮特效.这款按钮非常简单,但效果很好,非常漂亮. 在线演示 源码下载 3.FreeIconMaker - 在线创

Unity 动画知识之一

Unity现在已经用的很广泛啦,可是却一直没有什么美术向的教程. 程序用方面的内容在各个论坛都有讨论,但是美术似乎很弱势啊. 明明美术也很需要掌握引擎方面的内容嘛! 山谷里的野百合还有春天呢 我们美术也要出教程! 这次选了本菜鸡比较不那么菜的细分领域?unity3d  3D美术模块 来讲 美术小伙伴们肯定是懒得看那么多字啦,所以我就写的尽量有意思一点吧…… 计划是从入门到住院全部讲完的,但是能不能讲完我也不晓得,挖坑不填什么的最开心了 至于为什么是从入门到住院,因为学了这套东西,你就具备了在项目

2D骨骼动画工具DragonBones的使用教程

怎样用更少的美术成本创造出更生动的动画效果?今天就为大家介绍一套开源的2D骨骼动画框架和工具--DragonBones,它包含了桌面骨骼动画制作工具DragonBonesPro和一套多语言版本的DragonBones骨骼动画库. 下面为大家介绍DragonBones的常用术语和使用方法. 一.DragonBones 2D骨骼动画中的常用术语骨架:骨架Armature,是2D骨骼动画中最常用的名词,一般指的是由很多骨骼组成的一个整体.DragonBones中同时代表一个可以包含动画的角色. 骨骼(

07 动画系统

    Mecanim动画(新版动画)    选中一个动画在右侧的属性面板中可以查看动画的种种属性,    动画类型:None:无任何动画    Legacy:旧版Animation动画   Generic:一般动画(非人型动画)    Humanoid:人型动画 人型动画设置: 人型动画最重要的表示骨骼的设置,没有与之相匹配的骨骼,动画就不会播放 在属性面板进入动画剪辑中可对动画的长度以及播放时的状态进行编辑 LoopTime: 循环播放Loop Pose:循环姿势,解决最后一帧和最后一帧衔接