游戏中,我们的人物在某些时候,可能在一个时间点在做两件事,这样就需要同时播放两个动画,但我们肯定不能简单将其叠加,比如移动着开枪、攻击、挥手等等,那么在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脚本,稍微加点料:

 using UnityEngine;
using System.Collections; public class DearMove : MonoBehaviour
{
private Animator anim; //动画状态机
private int RunFloat; //Run参数ID
private int WaveTrigger; //Wave参数ID
private float vertical; //前进 void Awake ()
{
anim = gameObject.GetComponent<Animator>();
RunFloat = Animator.StringToHash("Run");
WaveTrigger = Animator.StringToHash("Wave");
} void Update ()
{
//呼叫方向控制
vertical = Input.GetAxis("Vertical");
//根据前进控制,设置Run参数的值,
//后面两个参数可不加,这里是为了让从走到跑看得更明显
anim.SetFloat(RunFloat, vertical, 1f, Time.deltaTime); if (Input.GetKeyDown(KeyCode.V))
{
Debug.Log("wave");
anim.SetTrigger(WaveTrigger);
}
}
}

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

AnimatorController动画遮罩的更多相关文章

  1. CSS3动画遮罩文字特效

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...

  2. jquery动画遮罩

    以前一直以为遮罩都是鼠标移上去,改变透明度实现的,后来看到过这样的一个遮罩动画,然后今天自己写了一个,因为弹出的遮罩是圆形的,所以从美观上来说,这个遮罩效果更适合于方形图片. <div clas ...

  3. AnimatorController动画融合树

    通过Unity动画状态机,能帮我们轻松处理转换各个动画片断,达到想要的效果,但是如果仅仅是一个个动画的硬生生的切换,那么看起来就非常突然,而不真实了,在质量要求比较高的游戏中,特别是动作游戏,我们就不 ...

  4. 代码生成AnimatorController

    0.出发点 现在的项目需要设置多套动画组合,全部是由策划在XML文件中设置完成,如果完全的手动在AnimatorController中去做不但工作量大而且如果将来有配置修改了还要一个个去找到对应的自状 ...

  5. Flash动画

    Flash (交互式矢量图和Web动画标准) Flash是由macromedia公司推出的交互式矢量图和 Web 动画的标准,由Adobe公 司收购.做Flash动画的人被称之为闪客.网页设计者使用 ...

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

    解决什么问题? 动画分层可以用来解决什么样的问题呢?试想一下如果你要开发一款第三人称的射击游戏,那么肯定是希望身体的动画分为上下两部分,上方根据瞄准的位置和是否射击进行动画播放,下方根据移动播放动画. ...

  7. ios遮罩层的简单使用

    /** 大图 */ - (IBAction)bigImg { //1.添加按钮遮罩层 UIButton *cover=[[UIButton alloc] init]; cover.frame=self ...

  8. Unity 动画知识之一

    Unity现在已经用的很广泛啦,可是却一直没有什么美术向的教程. 程序用方面的内容在各个论坛都有讨论,但是美术似乎很弱势啊. 明明美术也很需要掌握引擎方面的内容嘛! 山谷里的野百合还有春天呢 我们美术 ...

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

    怎样用更少的美术成本创造出更生动的动画效果?今天就为大家介绍一套开源的2D骨骼动画框架和工具--DragonBones,它包含了桌面骨骼动画制作工具DragonBonesPro和一套多语言版本的Dra ...

随机推荐

  1. 命令行启动Hololens Emulator,可解决内存不足的问题

    有时候在虚拟机测试时常会出现 内存不足 的情况,导致应用卡顿,调整 /memsize 参数大小: start "HoloLens" "C:\Program Files ( ...

  2. (转载)html中div使用自动高度

    为什么要使用div标签 1.更多的配置项,那就意味着更灵活,当然,难度也更高: 2.可以方便的容纳其他html标签:     static定位就是不定位,出现在哪里就显示在哪里,这是默认取值,只有在你 ...

  3. Submission

    EI: ICIC Express Letters: http://www.icicelb.org/elb/index.html IJICIC: http://www.ijicic.net/ijicic ...

  4. img 转化成iso镜像的办法

    最近在使用KVM启用虚拟机,然后将里面的环境和配置 配置成我们公司需要的环境,再打包成iso镜像,之后再次生成新的虚拟机. 但是KVM启动出的镜像生成的是img镜像 ,需要将img镜像转换成iso镜像 ...

  5. java中的d单例模式

    public class SimpleDemo1 { //恶汉式 //类初始化时,立即加载这个对象(没有延时加载的优势).加载类时,天然的是线程安全的 private static final Sim ...

  6. vim - 自动补齐

    OmniComplete是基于ctags的,所以要先安装ctags 到http://www.vim.org/scripts/script.php?script_id=2358下载cpp_src.tar ...

  7. python字符串及正则表达式[转]

    原文链接:http://www.cnblogs.com/guojidong/archive/2012/12/20/2826388.html 字符串: 正则表达式 正则表达式元字符与语法图: 注意事项: ...

  8. mysql 中文字段排序( UTF8按拼音首字母排序)

    select * from tableName CONVERT( FieldName USING gbk ) COLLATE gbk_chinese_ci desc

  9. Recursive - leetcode [递归]

    经验tips: Recursion is the best friend of tree-related problems. 一是只要遇到字符串的子序列或配准问题首先考虑动态规划DP,二是只要遇到需要 ...

  10. html绑定

    目的 html绑定可以绑定DOM元素内的HTML内容. 示例: <div data-bind="html: details"></div> <scri ...