一:前言

Avatar Mask可以实现播放动画时让身体的某些部位不起作用(即不播放动画)
Unity可以通过Avatar Mask创建一个身体遮罩来控制身体的某一部分是否受动画的影响,称为动画混合


二:使用场景

例如人物有两个动画,走路和挥手,一般走路动画包括上半身动作和下半身动作,使用Avatar Mask可以实现下半身播放走路动画的同时上半身播放只播放挥手动画而不播放走路动画


三:实现步骤——上半身播放挥手动画的同时下半身播放走路动画

——创建Avatar Mask
Project—Create—Avatar Mask


——设置Avatar Mask
Mask可以控制的部位包括:头部,左臂,右臂,左手,右手,左腿,右腿和跟关节以及手和脚切换IK状态
单击某一部分来开启或关闭动画的控制,红色则表示不播放当前层此部位的动作,绿色则表示播放当前层此部位的动作
Unity中的Avatar Mask_经验分享


——设置Mask参数
创建新的层单独控制挥手的上半身动作,将权重设置为1,遮罩选择为刚创建的Avatar Mask,Blending选择Override
Unity中的Avatar Mask_经验分享_02
注意Blending一般情况下选择Override覆盖模式,Additive叠加模式仅适用于每个层控制单独部位的动画

——设置两个层的动画机参数,Base Layer的状态切换参数为IsWalk,Body_Up Layer的状态切换参数为IsWave
Unity中的Avatar Mask_经验分享_03
Unity中的Avatar Mask_# Unity相关技术_04


——编写代码

using UnityEngine;

public class AvatarMaskTest : MonoBehaviour
{
    private Animator ani;

    private void Awake()
    {
        ani = GetComponent<Animator>();
    }

    private void Update()
    {
        //播放走路动画
        float v = Input.GetAxisRaw("Vertical");
        if (v > 0)
        {
            ani.SetBool("IsWalk", true);
        }
        else
        {
            ani.SetBool("IsWalk", false);
        }

        //播放挥手动画
        if (Input.GetKey(KeyCode.A))
        {
            ani.SetBool("IsWave", true);
        }
        else if (Input.GetKeyUp(KeyCode.A))
        {
            ani.SetBool("IsWave", false);
        }
    }
}


——最终实现上半身播放挥手动画的同时下半身播放走路动画
Unity中的Avatar Mask_# Unity相关技术_05