[Unity动画]04.Avatar Mask
参考链接:
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的更多相关文章
- Unity---动画系统学习(6)---Avatar Mask动画融合、Layers动画分层、IK反向动力学
1. 介绍 Avatar Mask(动画融合) 前面我们一直介绍的都是动画混合,一般用于解决边跑边转弯的问题.而动画融合一般用于解决例如边跑边挥手的问题. 简单说就是让跑步去控制腿的骨骼,挥手控制手的 ...
- Unity 动画知识之一
Unity现在已经用的很广泛啦,可是却一直没有什么美术向的教程. 程序用方面的内容在各个论坛都有讨论,但是美术似乎很弱势啊. 明明美术也很需要掌握引擎方面的内容嘛! 山谷里的野百合还有春天呢 我们美术 ...
- Unity动画机制 Animator与Animator Controller教程
Unity动画机制Animator 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Unity 动画系统目录 之 Animation
返回 Unity 动画系统目录 官方文档 Animation:https://docs.unity3d.com/ScriptReference/Animation.html Animator:http ...
- Unity动画优化
Unity动画优化 https://blog.csdn.net/TracyZly/article/details/79991593 Unity中Animator做UI动画的一些细节 https://b ...
- Unity 动画
Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelli ...
- Unity动画
Unity 并没有自带建模工具. 3D建模工具 maya, 3dmax, blender Skinned Mesh Renderer Mesh Renderer Mesh Filter Modelli ...
- 关于 Unity UGUI 中修改 Mask 组件下 Image 等子节点组件的材质无效的问题
前几天同事做了一个效果,希望在原本使用了遮罩组件 Mask 的技能图标(让技能图标变成圆形)上在添加一个置灰的功能,但问题来了:因为是动态根据游戏中玩家的条件才动态置灰,以修改 Mask 下子节点 I ...
- [Unity动画]01.HasExitTime & ApplyRootMotion
参考链接: https://www.cnblogs.com/hammerc/p/4828774.html 资源下载: https://assetstore.unity.com/packages/ess ...
随机推荐
- Redis:五种数据类型的简单增删改查
Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...
- Mongodb主从复制 及 副本集+分片集群梳理
转载努力哥原文,原文连接https://www.cnblogs.com/nulige/p/7613721.html 介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 ...
- linux zip删除指定文件和追加文件
使用zip命令的-d参数即可删除zip包中的特定文件. 示例:假设有test.zip,包含_code(目录)._code.zip.readme.txt三个文件,现在要删除test.zip中的_code ...
- SDRAM单字写操作
SDRAM单字写操作 1.单字写操作时序 2.写verilog程序体会 在初始状态,先写好跳转条件.If()....else... 3.通过仿顺序操作来实现连续写操作 首先完成单字写操作,然后跳转到下 ...
- TouchSlide 插件参数
TouchSlide 可以说是 SuperSlide 手机简化版,不同的地方在于: 1.TouchSlide是纯javascript开发的,不依赖任何js库,鉴于此,TouchSlide调用方法和Su ...
- 利用curl 模拟多线程
所谓多线程就是多个 程序同时运行,单线程:执行一段逻辑,等待完成后 在执行另外一个. 多线程:几个逻辑同时进行处理,不需要相互等待,提高了总的执行时间 接下来就用curl实现多线程 实现逻辑 1. f ...
- Apache Solr 介绍
Apache Solr 介绍 Solr 是什么? Solr 是一个开源的企业级搜索服务器,底层使用易于扩展和修改的Java 来实现.服务器通信使用标准的HTTP 和XML,所以如果使用Solr 了解J ...
- AndroidStudio相关经验记录
1.初次打开Gradle工程特别慢,一直提示下载更新Gradle 解决办法:打开Gradle工程子目录:“\gradle\wrapper” 下的 “gradle-wrapper.properties” ...
- 【微软版本】redis 安装启动及设置密码<windows>
redis 安装启动及设置密码<windows> redis 1. 安装 1.1 下载解压包,直接解压到任意路径下即可 windows下载地址:ttps://github.com/MS ...
- VisualSVNServer 无法启动 could not log pid to file
启动SVN时候报了错误,然后查看日志发现报了如下错误 VisualSVNServer.exe: could not log pid to file C:/Windows/ServiceProfiles ...