参考链接:

https://www.cnblogs.com/hammerc/p/4832637.html

Avatar Mask主要用于动画层融合。例如说,边跑边举起东西,这个实际上就是下半身播放跑步动画,上半身播放举起动画,所谓的Avatar Mask就是播放动画时让身体的某些部位不起作用(即不播放动画)

1.添加一个新的动画层

其中Empty是一个空的动画,同时添加一个Trigger型参数wave

TestAnimator.cs

 using UnityEngine;

 public class TestAnimator : MonoBehaviour {

     //------------------------------------------外部
public float Move = ;
public bool IsDying = false; //------------------------------------------内部
private Animator animator; //常数
private int baseLayerIndex;
private int idleStateHash;
private int runStateHash;
private int dyingStateHash;
private string movePara;
private string isDyingPara;
private string wavePara; void Start ()
{
animator = GetComponent<Animator>(); baseLayerIndex = animator.GetLayerIndex("Base Layer");
idleStateHash = Animator.StringToHash("Base Layer.Idle");
runStateHash = Animator.StringToHash("Base Layer.Run");
dyingStateHash = Animator.StringToHash("Base Layer.Dying");
movePara = "move";
isDyingPara = "isDying";
wavePara = "wave";
} void Update ()
{
//------------------------------------------播放动作
animator.SetFloat(movePara, Move);
if (IsDying)
{
animator.SetBool(isDyingPara, true);
IsDying = false;
} //------------------------------------------动作恢复
AnimatorStateInfo stateInfo;
int fullPathHash; //BaseLayer
stateInfo = animator.GetCurrentAnimatorStateInfo(baseLayerIndex);
if (!animator.IsInTransition(baseLayerIndex) && stateInfo.normalizedTime >= )
{
fullPathHash = stateInfo.fullPathHash;
if (fullPathHash == dyingStateHash)
{
animator.SetBool(isDyingPara, false);
}
}
} public void SetDying(bool state)
{
if (animator)
{
animator.SetBool(isDyingPara, state);
}
} public void TriggerWave()
{
if (animator)
{
animator.SetTrigger(wavePara);
}
} public void ActionCallBack(string s)
{
if (s == "dyingStart")
{
Debug.Log("");
}
else if (s == "dying")
{
Debug.LogWarning("");
}
else if (s == "dyingEnd")
{
Debug.LogError("");
}
}
}

NewBehaviourScript.cs

 using UnityEngine;

 public class NewBehaviourScript : MonoBehaviour {

     public TestAnimator testAnimator;

     void Update ()
{
if (Input.GetKeyDown(KeyCode.Q))
{
testAnimator.Move = ;
}
if (Input.GetKeyDown(KeyCode.W))
{
testAnimator.TriggerWave();
}
}
}

效果如下。按下Q,播跑步动画,再按下W,覆盖为招手动画。可以试着将这两个层的位置换一下。可以看出,动画层越后优先级越高;同时还受动画层的权重影响。

2.创建一个Avatar Mask并添加到动画层中

如下图2,表示该动画层中只有上半身起作用

效果如下。按下Q,播跑步动画,再按下W,上半身播招手动画。

[Unity动画]04.Avatar Mask的更多相关文章

  1. Unity---动画系统学习(6)---Avatar Mask动画融合、Layers动画分层、IK反向动力学

    1. 介绍 Avatar Mask(动画融合) 前面我们一直介绍的都是动画混合,一般用于解决边跑边转弯的问题.而动画融合一般用于解决例如边跑边挥手的问题. 简单说就是让跑步去控制腿的骨骼,挥手控制手的 ...

  2. Unity 动画知识之一

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

  3. Unity动画机制 Animator与Animator Controller教程

    Unity动画机制Animator 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  4. Unity 动画系统目录 之 Animation

    返回 Unity 动画系统目录 官方文档 Animation:https://docs.unity3d.com/ScriptReference/Animation.html Animator:http ...

  5. Unity动画优化

    Unity动画优化 https://blog.csdn.net/TracyZly/article/details/79991593 Unity中Animator做UI动画的一些细节 https://b ...

  6. Unity 动画

    Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelli ...

  7. Unity动画

    Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelli ...

  8. 关于 Unity UGUI 中修改 Mask 组件下 Image 等子节点组件的材质无效的问题

    前几天同事做了一个效果,希望在原本使用了遮罩组件 Mask 的技能图标(让技能图标变成圆形)上在添加一个置灰的功能,但问题来了:因为是动态根据游戏中玩家的条件才动态置灰,以修改 Mask 下子节点 I ...

  9. [Unity动画]01.HasExitTime & ApplyRootMotion

    参考链接: https://www.cnblogs.com/hammerc/p/4828774.html 资源下载: https://assetstore.unity.com/packages/ess ...

随机推荐

  1. Spring Cloud Eureka 服务治理

    Spring Cloud Eureka 是 Spring Cloud Netflix 微服务套件的一部分,基于 Netflix Eureka 做了二次封装,主要负责完成微服务架构中的服务治理功能,服务 ...

  2. Windows Remote Shell(WinRM)使用介绍

    最近,为了实验我们安装了台Windows Server Core的服务器,没有图形界面的系统总会给人一种很完全的感觉,我们本着安全到底的想法,使用了Windows Remote Shell 的管理方式 ...

  3. Java第02次实验提纲(Java基本语法与类库)

    1. 熟悉Git 1.1 学会使用网页版的操作代码仓库(gitee) 申请账号,然后根据老师提供的链接或者二维码加入团队,然后修改昵称. fork老师提供的代码库项目,新建自己学号命名的文件并上传一些 ...

  4. Flask-状态保持-CSRF

    问题:cookies基于浏览器的同源策略,不同域名的cookie不能相互访问,为什么可以进行跨站请求伪造呢? 原因:cookie基于浏览器的同源策略,确实是在实现状态保持的时候,不能跨域访问. 跨站请 ...

  5. url参数 加密

    加密 url +? btoa(param) 解密 url + ?atob(param)

  6. elasticsearch 口水篇(1) 安装、插件

    一)安装elasticsearch 1)下载elasticsearch-0.90.10,解压,运行\bin\elasticsearch.bat (windwos) 2)进入http://localho ...

  7. bzoj5050: 建造摩天楼

    Description 属于小Q管辖的n座摩天楼从左往右排成一排,编号依次为1到n,第i座摩天楼的高度为h_i.小Q会进行m次以下两种 操作之一: 2 l r,询问h_l+h_{l+1}+...+h_ ...

  8. Linux下的Mysql安装 & 配置

    Hive的数据,是存在HDFS里的.此外,hive有哪些数据库,每个数据库有哪些表,这样的信息称之为hive的元数据信息. 元数据信息不存在HDFS里.而是存在关系型数据库里,hive默认用的是der ...

  9. flume-sink

    概述 从Flume Agent移除数据并写入到另一个Agent或数据存储或一些其他存储系统的组件被称为sink.Sink不断的轮询channel中的事件且批量的移除它们.这些事件批量写入到存储或索引系 ...

  10. 服务注册发现consul之三:服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka

    这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd euerka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...