[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 ...
随机推荐
- golang中defer的详解 转自https://blog.csdn.net/skh2015java/article/details/77081250
Go里的defer很有用,尤其在很多执行模块化操作时,初始化时给各个需要执行的模块传入参数,但是这些参数有些事在模块执行过程中才赋值的. 这时候有了defer就不会把代码写的很凌乱. Go的defer ...
- InfluxDB 1.6文档
警告!此页面记录了不再积极开发的InfluxDB的早期版本.InfluxDB v1.7是InfluxDB的最新稳定版本. InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载.它是TICK堆 ...
- Winfrom控件使用
1.Lablelable添加图片,解决图片和字体重叠? Text属性添加足够空格即可,显示效果如下所示: 2.根据窗体名称获取窗体并显示到指定panel? Label item = sender as ...
- winform无边框窗体更改大小
实现方式一: const int HTLEFT = 10; const int HTRIGHT = 11; const int HTTOP = 12; const int HTTOPLEFT = 13 ...
- ALGO-115_蓝桥杯_算法训练_和为T(枚举)
问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...
- Ubuntu14.04 下软件安装和卸载命令备记
一.Ubuntu中软件安装方法 1.APT方式 ()普通安装:apt-get install softname1 softname2 …; ()修复安装:apt-get -f install soft ...
- 管理MariaDB
查看当前用户信息 MariaDB [aa]> select user(); 查看所有存储用户信息 MariaDB [aa]> desc mysql.user; MariaDB [aa]&g ...
- RecyclerAdapter封装
import java.util.LinkedList; import java.util.List; import android.content.Context; import android.s ...
- Jmeter(十七)Logic Controllers 之 Interleave Controller
Interleave Controller----交错控制器,对于交错控制器官方文档解释的很清楚,上例子: 可以看到运行一次 Interleave Controller下的Sampler,运行一次 I ...
- svn 的add 和 commit
add 功能:向文件拷贝所在的文件夹中添加新的文件,并作出标识,是新添加的,下一步提交时将一并提交到Subversion版本库中去.简单的说就是将一新文件加入svn,你添加再提交后该文件就进入subv ...