Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用

目录

Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用

一、简单介绍

二、动画层 和 动画遮罩

1、为什么动画中会有层的概念

2、如何使用层动画

3、注意点

4、创建动画遮罩的两种方式

三、效果预览

四、实现步骤

五、关键代码:


一、简单介绍

Unity中的一些基础知识点。便于后期开发使用。

Unity动画系统,也称为“Mecanim”,提供了以下功能:

  • 简单的工作流程,设置动画的所有元素,包括对象,角色和属性。

  • 支持导入外部创建的动画片段和使用内置动画编辑器制作的动画片段。

  • 人型动画重新定位,动画角色的运动控制可以被所有的角色模型共享,即角色的外观(SkinedMesh)和运动(Animator)是分离的,它们互相组合之后形成最终的动画。

  • 用于编辑动画状态的的简化工作流程,即动画控制器。

  • 方便预览动画片段,以及片段之间的插值过渡。 这使得动画师可以独立于程序员工作,在不运行游戏的情况下,可以对原型和预览动画进行预览。

  • 管理动画与可视化编程工具之间的复杂交互。

  • 不同的身体部位可以使用不同的动画逻辑控制。

  • 动画的分层和掩蔽功能。

二、动画层 和 动画遮罩

1、为什么动画中会有层的概念

好处是有的,类似项目管理

第一:分离动画组

第二:规范动画制作

第三:提供更丰富的动画制作

Ps:其实跟我们的动画融合树差不多

2、如何使用层动画

1)添加动画层

2)添加参数

注意:参数是执行动画的触发条件

3)给第二层的触发线绑定参数

绑定的过程中,其实我们会发现New State就代指第一层动画组,而参数帮助我们过渡了层。当然动画是显示不出来的,但是动画片段确实执行了。

3、注意点

在动画层之间切换的过程中,其实主要是通过参数的满足与否来进行层动画执行操作,但是有一个前提就是层的权重 如下图:

层的设置参数说明:

  • weight :权重,对应着这一层动画在所有层动画中所占的比例。以上图来说明,new layer中的weight为0,模型的动画效果就是base layer中的动画;0-1之间,模型的动画效果就是这两层动画的混合;

  • mask :遮罩,手动控制模型哪些骨骼参与动画哪些不参与

  • blending:混合模式—additive和override;additive 两种动画相叠加,并不算融合;override 两种动画相融合;

  • sync :同步层 就是让该层复刻其他层的动画,其他层可以从Source Layer 选择。

  • Timing:当前层和Source层同一个状态使用的动画时间长度不一致时,不勾选timing那么复制的层按Source层的时间播放(效果就是复制层动画可能会变快或变慢,Source层动画播放速度不变),勾选timing则Source层按复制层的时间播放(效果就是Source层动画可能会变快或变慢,复制层动画播放速度不变),只有勾选sync,timing才可以勾选;

  • IK Pass :表示启动IK动画;

1)权重问题决定动画能不能显示出来

如果不设置权重,你会发现即便分好层,而且在状态机中发现动画执行了,但是界面的角色并没有显示出来。

前面的分享已经提到过使用代码控制动画的参数,这里如何通过代码设置权重呢?

    [SerializeField]private Animator ani;void Start () {// 表示设置动画第二层的权重为1ani.SetLayerWeight(1, 1);}

4、创建动画遮罩的两种方式

1)第一种就是create一个avatar Mask,如下:

humanoid 对人体骨骼模型的遮罩,红色代表不参与动画,绿色就是正常参与动画。动画遮罩在混合动画中表现出色,上面说的调整weight值也能实现两种动画的混合,但是这种混合出来的动画看起来很别扭,远没有动画遮罩效果好。
transforms可以导入某一avatar的全部骨骼点,动画具体到对骨骼点的控制;

2)第二种遮罩,就是直接在动画剪辑的属性上更改,如图一为humanoid类型的动画剪辑属性:

图二为generic类型的动画剪辑属性:

这种遮罩更改之后,所有使用到该动画剪辑的地方都会享受到这种遮罩效果;

三、效果预览

四、实现步骤

目标:新建 动画 Layer ,和 Avatar Mask 遮罩,实现边跑边举的动作

1、导入带动画的模型到场景中

2、构建一个 Animator Controoller

3、在 Base Layer 添加一个 Blend Tree,实现 走跑状态的控制

(实现可以参考网址:https://blog.csdn.net/u014361280/article/details/106035344)

4、新建一个Layer 为 HandsLayer,来控制手的上举动作(空动画和上举动画拖入)

5、新建一个 Avatar Mask

6、Avatar Mask 仅只有收可以手臂、手、对应 IK 可以动,其他屏蔽掉

7、把 Avatar Mask 赋值给第二层 HandsLayer

8、新建脚本,控制动画的切换

9、把脚本挂载到游戏模型上

10、运行场景,即可以看到,游戏模型即可以跑也可以上举

五、关键代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class Player : MonoBehaviour
{// 动画控制机private Animator anim;// 参数 转为 StringToHash IDprivate int speedForwardId = Animator.StringToHash("SpeedForward");private int turnLeftRightId = Animator.StringToHash("TurnLeftRight");private int vaultId = Animator.StringToHash("IsVault");// Start is called before the first frame updatevoid Start(){// 获取 动画控制机anim = GetComponent<Animator>();}// Update is called once per framevoid Update(){if (anim !=null) {// 根据混合数的数值上下限设置后面的 乘以比例anim.SetFloat(speedForwardId,Input.GetAxis("Vertical")*4.15f);anim.SetFloat(turnLeftRightId, Input.GetAxis("Horizontal")*122.8f);}// 监视上举动作VaultHandler();}// 监视上举动作void VaultHandler() {// 上举动作if (Input.GetKeyDown(KeyCode.Space)){// 比重激活HandsLayeranim.SetLayerWeight(1, 1);anim.SetBool(vaultId, true);}// 释放上举动作if (Input.GetKeyUp(KeyCode.Space)){// 比重失活HandsLayeranim.SetLayerWeight(1, 0);anim.SetBool(vaultId, false);}}}

Unity Mecanim动画系统 之 动画层(Layers)和 动画遮罩(Avatar Mask)的简单使用相关推荐

  1. [Unity][TimeLine][Unity功能]TimeLine系统能做什么--游戏剧情动画系统

    TimeLine系统能做什么,给游戏加分,简化 游戏剧情动画 的工作量,提高 游戏剧情动画 的效率. 也可以做像拳皇,街头霸王,生与死,等 类似的 格斗游戏.胜利特效,KO特效. 体育类型,街头篮球, ...

  2. Unity动画系统学习笔记(一)动画剪辑与状态机

    一.动画系统工作流 一个完整的动画系统工作流包含如下几个部分: 动画剪辑(Animation Clips):包含某些对象如何随时间更改其位置.旋转或其他属性的信息. 状态机(Animator Cont ...

  3. unity3d用动画遮罩(avatar mask)实现动画切换

    这里主要是为了实现端枪动作,"脚动手不动"的简单实现 1.添加shoot layer射击动作图层 2.右键 创建一个avatar mask 3.设计遮罩(手动,腿不动) 注意 这里 ...

  4. 关于Unity中新版动画系统的使用

    Mecanim动画 1:旧版动画系统只能通过代码来控制动画播放,随着动画种类变多,代码复杂度也会增加,同时动画过渡也需要非常繁琐的代码控制,为了让有经验的动画师开发动画,unity推出了针对人物角色的 ...

  5. VR开发——Unity动画系统2(V客it学院技术分享)

    版权声明:本文为博主原创文章,欢迎转载.请保留博主链接:http://blog.csdn.net/andrewfan 偶然从csdn上看见各位大佬为Unity事业做出这么大的贡献,故献出自己的一份力, ...

  6. unity 动画系统

    Unity动画系统 Unity动画系统是Unity中非常重要的一部分,它提供了一个强大的框架来实现动画.Unity动画系统可以处理几乎所有的动画需求,从简单的2D动画到复杂的3D动画. Unity动画 ...

  7. Mecanim动画系统

    本期教程和大家分享Mecanim动画系统的重定向特性,Mecanim动画系统是Unity3D推出的全新的动画系统,具有重定向.可融合等诸多新特性,通过和美工人员的紧密合作,可以帮助程序设计人员快速地设 ...

  8. 【Unity游戏开发】动画系统(三)按钮动画

    文章目录 动画系统之按钮动画 1. 按钮Botton 2. 创建一个Button按钮 3. 按钮动画 3.1 改变颜色 3.2 改变图片 3.3 改变动画 结语 动画系统之按钮动画 动画系统是一个比较 ...

  9. Unity动画系统基础总结

    Animation View动画的编辑 动画的编辑的打开方式:一是可以通过Ctrl+6来完成,二是可以通过在project窗口鼠标右键里面的Create里面的Animation创建,三是可以通过Win ...

  10. Unity用户手册-动画系统Animator

    动画系统Animator 动画类型 Legacy 基础的动画 Generic 动画,包含动画状态机 Humanoid 人形动画,包含动画状态机 Update Mode Normal 动画播放将与Upd ...

最新文章

  1. Ubuntu中C代码静态检查工具Splint的安装配置和使用
  2. Badread: simulation of error-prone long reads
  3. 目标检测--Accurate Single Stage Detector Using Recurrent Rolling Convolution
  4. invalid ELF header
  5. 032_SpringBoot多环境属性配置文件
  6. 你要避开的 5 个数据驱动雷区
  7. 3.1 SVM原理入门
  8. excel表格中添加combobox_excel高阶打印技巧:批量为表格添加logo,学会它老板都夸你厉害...
  9. 设计模式(二 三)工厂模式:1-简单工厂模式
  10. .sh 编译 java_build-java.sh
  11. Dynamics CRM 2015/2016 Web API:Unbound Custom Action 和 Bound Custom Action
  12. SQL SERVER触发器(附有实例)
  13. 网络安全——端口对应服务大全(白帽必备万字快查表)
  14. 初始Pytorch框架
  15. TRIZ 40创新原理
  16. css ul1,CSS 列表样式 ul
  17. mac mtu测试_从Mac OS X的命令行设置MTU大小
  18. 苹果系统 macOS Mojave 10.14.4上安装 Ubuntu 18.04 双系统
  19. 面试之Java圣经1
  20. 【什么是服务网格?】

热门文章

  1. 爬虫js逆向基础——05`HOOK`
  2. python程序运行结果始终为0_下列Python程序的运行结果是 x=0 y=True print(xy and \'A\'\'B\')...
  3. (十七)NVIDIA Jetson Xavier NX——镜像烧写
  4. 配置网络拓扑图测试软件,某网络拓扑图如下所示,三台路由器上均运行RIPv1协议,路由协议配置完成后,测试 - 信管网...
  5. 我们线上教学是计算机哪方面应用,线上线下教学下计算机教学的应用
  6. 高精地图,养不起的 「 奢侈品 」
  7. 摄像头能用计算机里不显示,Windows7“计算机”不显示已连接的摄像头图标怎么办?...
  8. 尝试使用以5W1H分析法来学习5W1H分析法
  9. 主成分分析(PCA)是目前应用很广泛的一种代数特征提取方法
  10. C#串口上位机的开发,基于杜洋的视频课程