参考链接:

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

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

1.添加一个新的动画层

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

TestAnimator.cs

  1. using UnityEngine;
  2.  
  3. public class TestAnimator : MonoBehaviour {
  4.  
  5. //------------------------------------------外部
  6. public float Move = ;
  7. public bool IsDying = false;
  8.  
  9. //------------------------------------------内部
  10. private Animator animator;
  11.  
  12. //常数
  13. private int baseLayerIndex;
  14. private int idleStateHash;
  15. private int runStateHash;
  16. private int dyingStateHash;
  17. private string movePara;
  18. private string isDyingPara;
  19. private string wavePara;
  20.  
  21. void Start ()
  22. {
  23. animator = GetComponent<Animator>();
  24.  
  25. baseLayerIndex = animator.GetLayerIndex("Base Layer");
  26. idleStateHash = Animator.StringToHash("Base Layer.Idle");
  27. runStateHash = Animator.StringToHash("Base Layer.Run");
  28. dyingStateHash = Animator.StringToHash("Base Layer.Dying");
  29. movePara = "move";
  30. isDyingPara = "isDying";
  31. wavePara = "wave";
  32. }
  33.  
  34. void Update ()
  35. {
  36. //------------------------------------------播放动作
  37. animator.SetFloat(movePara, Move);
  38. if (IsDying)
  39. {
  40. animator.SetBool(isDyingPara, true);
  41. IsDying = false;
  42. }
  43.  
  44. //------------------------------------------动作恢复
  45. AnimatorStateInfo stateInfo;
  46. int fullPathHash;
  47.  
  48. //BaseLayer
  49. stateInfo = animator.GetCurrentAnimatorStateInfo(baseLayerIndex);
  50. if (!animator.IsInTransition(baseLayerIndex) && stateInfo.normalizedTime >= )
  51. {
  52. fullPathHash = stateInfo.fullPathHash;
  53. if (fullPathHash == dyingStateHash)
  54. {
  55. animator.SetBool(isDyingPara, false);
  56. }
  57. }
  58. }
  59.  
  60. public void SetDying(bool state)
  61. {
  62. if (animator)
  63. {
  64. animator.SetBool(isDyingPara, state);
  65. }
  66. }
  67.  
  68. public void TriggerWave()
  69. {
  70. if (animator)
  71. {
  72. animator.SetTrigger(wavePara);
  73. }
  74. }
  75.  
  76. public void ActionCallBack(string s)
  77. {
  78. if (s == "dyingStart")
  79. {
  80. Debug.Log("");
  81. }
  82. else if (s == "dying")
  83. {
  84. Debug.LogWarning("");
  85. }
  86. else if (s == "dyingEnd")
  87. {
  88. Debug.LogError("");
  89. }
  90. }
  91. }

NewBehaviourScript.cs

  1. using UnityEngine;
  2.  
  3. public class NewBehaviourScript : MonoBehaviour {
  4.  
  5. public TestAnimator testAnimator;
  6.  
  7. void Update ()
  8. {
  9. if (Input.GetKeyDown(KeyCode.Q))
  10. {
  11. testAnimator.Move = ;
  12. }
  13. if (Input.GetKeyDown(KeyCode.W))
  14. {
  15. testAnimator.TriggerWave();
  16. }
  17. }
  18. }

效果如下。按下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. golang中defer的详解 转自https://blog.csdn.net/skh2015java/article/details/77081250

    Go里的defer很有用,尤其在很多执行模块化操作时,初始化时给各个需要执行的模块传入参数,但是这些参数有些事在模块执行过程中才赋值的. 这时候有了defer就不会把代码写的很凌乱. Go的defer ...

  2. InfluxDB 1.6文档

    警告!此页面记录了不再积极开发的InfluxDB的早期版本.InfluxDB v1.7是InfluxDB的最新稳定版本. InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载.它是TICK堆 ...

  3. Winfrom控件使用

    1.Lablelable添加图片,解决图片和字体重叠? Text属性添加足够空格即可,显示效果如下所示: 2.根据窗体名称获取窗体并显示到指定panel? Label item = sender as ...

  4. winform无边框窗体更改大小

    实现方式一: const int HTLEFT = 10; const int HTRIGHT = 11; const int HTTOP = 12; const int HTTOPLEFT = 13 ...

  5. ALGO-115_蓝桥杯_算法训练_和为T(枚举)

    问题描述 从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T.每个元素限选一次,不能一个都不选. 输入格式 第一行一个正整数n,表示整数集内元素的个数. 第二行n个整数,用空格隔开. 第 ...

  6. Ubuntu14.04 下软件安装和卸载命令备记

    一.Ubuntu中软件安装方法 1.APT方式 ()普通安装:apt-get install softname1 softname2 …; ()修复安装:apt-get -f install soft ...

  7. 管理MariaDB

    查看当前用户信息 MariaDB [aa]> select user(); 查看所有存储用户信息 MariaDB [aa]> desc mysql.user; MariaDB [aa]&g ...

  8. RecyclerAdapter封装

    import java.util.LinkedList; import java.util.List; import android.content.Context; import android.s ...

  9. Jmeter(十七)Logic Controllers 之 Interleave Controller

    Interleave Controller----交错控制器,对于交错控制器官方文档解释的很清楚,上例子: 可以看到运行一次 Interleave Controller下的Sampler,运行一次 I ...

  10. svn 的add 和 commit

    add 功能:向文件拷贝所在的文件夹中添加新的文件,并作出标识,是新添加的,下一步提交时将一并提交到Subversion版本库中去.简单的说就是将一新文件加入svn,你添加再提交后该文件就进入subv ...