【Unity动画系统】动画层级(Animation Layer)讲解与使用

如何使用Unity的Animation Layer和Avater Mask把多个动画组合使用

想让玩家持枪行走,但是手里只有行走和持枪站立的动作。

Unity中最方便的解决办法就是使用动画层级animation layer以及替身蒙版avatar mask。

创建一个动画层级

Weight表示权重,0的话则完全不播放,1的话则会播放;

Mask为骨骼蒙版

创建一个Avatar Mask

这个Avatar只会影响选中的部分。

是人形动画则直接使用Humanoid。如果不是,可以用下面的Transform直接选择哪些骨骼节点受影响或不受影响。

Blending中Override是指将当前动画取代上面的动画,而使用一部分动画则是当前动画取代之前部分的动画;而Additive指的是将上面的动画与本身动画混合起来。

勾选后为同步,表示当前层级与哪个层级保持一致。

表示开启IK动画,这里指的是蒙层的IK。

实战:


先在层级中创建一个空状态,表示在默认情况下这一层不播放任何动画。

然后添加需要的动作。

写一个参数Rifle,然后设置其启动的值。

在代码中触发:

bool armedRifle;	//用来判断是否要抬起手public void GetArmedRifleInput(InputAction.CallbackContext ctx){armedRifle = !armedRifle;	//每次都取一次反animator.SetBool("Rifle", armedRifle);	//然后赋值给动画}

利用Animation Layers中的Additive模式把多个动画混合在一起(可用来实现动画的疲劳感)

Additive将现有动画添加到现有动画上,这一层动画不会取代现有动画。

常见场景就是为角色添加疲劳感。

空状态为核心的轮辐轮毂构架(Spoke-hub distribution paradigm)来安排这一层状态机

一般动画判断在代码里不太适合直接使用字符串,包括直接在调用上和不直接使用常量一致,都应先声明变量再添加

创建第三个状态机,然后将其改为Additive

    float currentFatigue;   //现在疲劳值float minFatigue = 0f;  //最低疲劳值float maxFatigue = 10f; //最高疲劳值int fatigueLayerIndex;  //获取动画层级void Start(){fatigueLayerIndex = animator.GetLayerIndex("State");    //获取层级序号名字}void Update(){CalculateFatigue();}void CalculateFatigue(){if(currentSpeed < 1f && currentFatigue >= minFatigue)    //速度小于1,疲劳值大于等于0时,疲劳值减减{currentFatigue -= Time.deltaTime;}else if(currentSpeed > 2f && currentFatigue <= 10) //速度大于2,疲劳值小于等于10时,疲劳值加加{currentFatigue += Time.deltaTime;}else    //最后都不属于的返回{return;}currentFatigue = Mathf.Clamp(currentFatigue, minFatigue, maxFatigue);  //限制最小值与最大值animator.SetLayerWeight(fatigueLayerIndex, currentFatigue / maxFatigue);  //对疲劳权重的修改,修改的层数,修改的权重值}

Unity动画层级(Animation Layer)的Sync和Timing介绍

新键一个层级,有些工程中我们需要将某个层级的复制下来然后修改。

可以直接使用同步Sync,打勾后选择与哪个层级同步。

虽然同步了,但是动画内容都是空的,需要自行添加,blend tree需要选择Create new BlendTree in State。

选择受伤过后的动画加入新的混合树,同样选择以什么方向为计算。

比如打架的行走是普通走路的60%。

3.5是行走混合树的阈值,这里乘以60%然后除以现在的阈值。

新阈值3.5 * 0.6 / 1.737

代码:

    int injuredLayerIndex;  //用来保存动画层的序号float injuredFactor = 0.6f; //角色受伤过后移动速度受到的影响bool isInjured; //用来表明是否受伤private void Start(){injuredLayerIndex = animator.GetLayerIndex("injured");  //获取序号}public void GetArmedInjuredInput(InputAction.CallbackContext ctx){isInjured = !isInjured;if (isInjured){animator.SetLayerWeight(injuredLayerIndex, 1);  //如果受伤则将层数权重设置为1}else{animator.SetLayerWeight(injuredLayerIndex, 0);  //如果受伤则将层数权重设置为0}}

因为没有所以使用Jump

按下空格后

层级同步,如果动画本身长度不同步怎么办?

Unity会将短的那个动画的长度修改为被它所需要同步的层级中。

如果希望由这个层级来决定动画状态的时长?

需要勾选timing。

不过只有当层级的混合模式是override的时候才可以使用

勾选了Timing后动画状态的播放时长就由它和被它同步的层级共同决定。哪个层级的决定权更大呢?看权重,当当前层级权重为1 时,听当前层级的,权重为0时,听被同步层级的,一半的话取平均值

总结:层级同步动画必须一致,关于与谁一致,看timing与weight的设置。

使用Unity动画层级后很多动画无法正常播放?Layer优先级与Additive的工作原理

动画层级优先级越往下越高。

如果Blending是override,如果权重是1,那么会将上面的全部覆盖掉;如果是某些部位,那么完全覆盖掉当前部位的动作。

如果是Additive,它不代表会代替某些动画, 它的最高级的优先级表示不存在任何一个override的层级可以完全覆盖掉当前的动画。

Additive的具体行为是把当前层级所播放的动画加到之前层级的结果上去,当前这里的avatar mask表示只影响躯干的部位;

weight表示它会把本身动画以多少比例添加到之前的结果上去,0表示不添加、1表示完全添加。

比如喘气弯腰最大幅度是六十度,那么权重为1时,那么就在原有动画基础上弯腰60度;权重为0.5时,那么就在原有动画基础上弯腰30度。

当一个动画只有静止的动作(如持枪),最好使用Override,因为Additive是将动画添加到其他层级的动画结果上去,而一般静止动画除了第一帧和最后一帧,中间是没有动画的,而这时候就不可能把动画添加到原来动画上去。

按照规则合理的配置层级属性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832783.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用 OpenNJet 分分钟完成打地鼠小游戏部署

文章目录 OpenNJet应用引擎什么是应用引擎什么是OpenNJet独特优势技术架构 OpenNJet安装RPM安装 部署打地鼠小游戏配置OpenNJet部署打地鼠小游戏启动 NJet访问打地鼠小游戏 总结 今天阿Q打算使用OpenNJet应用引擎来部署一下我们的打地鼠小游戏。在开始部署之前&#xff0c;我们…

教你快速记录每日待办事项,并提醒自己按时完成不忘记

在忙碌的日常生活中&#xff0c;我们经常会面临待办事项繁杂、时间紧迫的困扰。为了更高效地管理时间和任务&#xff0c;我们需要一个能够快速记录并准时提醒我们完成待办事项的工具。此时&#xff0c;敬业签这类的待办软件就成为了很多人的首选工具。 敬业签是一款功能强大的…

Raft共识算法图二解释

下面是有关Raft协议中不同术语和概念的翻译及解释&#xff1a; 术语和概念&#xff1a; 任期号&#xff08;term number&#xff09;&#xff1a;用来区分不同的leader。前一个日志槽位的信息&#xff08;prelogIndex&#xff09;&#xff1a;这是前一个日志条目的索引&#…

5000亿参数来了:微软将推出 MAI-1 模型硬刚谷歌和OpenAI|TodayAI

美国的科技巨头微软公司&#xff0c;正在积极扩展其人工智能&#xff08;AI&#xff09;技术的领域。最新消息显示&#xff0c;微软将推出一款名为MAI-1的全新AI模型&#xff0c;其规模巨大&#xff0c;预计将拥有5000亿个可调参数。这一开发工作由Inflection AI的CEO穆斯塔法苏…

深度剖析Comate智能产品:科技巧思,实用至上

文章目录 Comate智能编码助手介绍Comate应用场景Comate语言与IDE支持 Comate安装步骤Comate智能编码使用体验代码推荐智能推荐生成单测注释解释注释生成智能问答 Comate实战演练总结 Comate智能编码助手介绍 市面上现在有很多智能代码助手&#xff0c;当时互联网头部大厂百度也…

损失函数详解

1.损失函数 是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误&#xff0c;损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数&#xff08;loss function&#xf…

文件夹重命名技巧:克服文件夹名混乱不规律的难题,实现高效管理

在数字时代&#xff0c;我们每天都在与无数的文件夹打交道。这些文件夹中可能存储着文档、图片、视频等各种类型的文件。然而&#xff0c;随着文件夹数量的增加&#xff0c;如何有效地管理和命名这些文件夹成为了一个挑战。混乱和不规律的文件夹名不仅降低了工作效率&#xff0…

安卓view坐标系

目录 一、getX、 getRawX、 getTranslationX 等的图形表示二、 getX、 getRawX、 getTranslationX 意义的文字描述 一、getX、 getRawX、 getTranslationX 等的图形表示 坐标系&#xff1a; 视图坐标系&#xff1a; 二、 getX、 getRawX、 getTranslationX 意义的文字描述 …

TCP UDP

传输层 端口号 tcp udp 网络层 IP地址 IP TCP&#xff0c;UDP 1&#xff0c;TCP是面向链接的协议&#xff0c;而UDP是无连接的协议; 2&#xff0c;TCP协议的传输是可靠的&#xff0c;而UDP协议的传输“尽力而为” 3&#xff0c;TCP可以实现流控&#xff0c;但UDP不行;…

vue打包报错:CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory

前言&#xff1a; vue项目&#xff0c;打包报错&#xff1a;CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 报错现象&#xff1a; 报错原因&#xff1a; 这个错误是由Node.js在尝试分配内存时因为系统的可用内存不足而发生的。"JavaScript heap…

Discourse 清理存储空间的方法

Discourse 使用一段时间以后会发现硬盘空间占用非常多。 主要是因为 Docker Image 的问题&#xff0c;如果升级次数越多&#xff0c;空间占用越多。 运行下面的命令&#xff1a; ./launcher cleanup 能够帮助你清理 Discourse 占用的空间。 如下面代码所示&#xff1a; […

微信/支付宝支付服务搭建,一次性搞定!

微信支付 付款码支付 付款码支付是指用户展示微信钱包内的“付款码”给商户系统扫描后直接完成支付&#xff0c;适用于线下场所面对面收银的场景&#xff0c;例如商超、便利店、餐饮、医院、学校、电影院和旅游景区等具有明确经营地址的实体场所JSAPI支付 JSAPI支付是指商户通过…

2024年第七届可再生能源与环境工程国际会议(REEE 2024)即将召开!

2024年第七届可再生能源与环境工程国际会议&#xff08;REEE 2024&#xff09;将于2024 年8月28-30日在法国南特举行。共绘绿色未来&#xff0c;全球同频共振&#xff01;REEE 2024将汇聚全球可再生能源与环境工程领域的专家学者和业界精英&#xff0c;共同探讨行业发展的前沿技…

华南理工大胆突破,全国首个软物质科学与工程本科专业诞生!

不久前&#xff0c;教育部公布了2023年普通高等学校本科专业备案和审批结果&#xff0c;一个新名词吸引了我——软物质科学与工程。这是今年新增的24种新专业之一&#xff0c;而华南理工大学成为国内首个申请设置该专业的高校。这让我产生了强烈的好奇心&#xff1a;软物质是什…

【OpenVINO™】在 C# 中使用OpenVINO™ 部署 YOLO-World 模型实现实时开放词汇对象检测

YOLO-World是一个融合了实时目标检测与增强现实&#xff08;AR&#xff09;技术的创新平台&#xff0c;旨在将现实世界与数字世界无缝对接。该平台以YOLO&#xff08;You Only Look Once&#xff09;算法为核心&#xff0c;实现了对视频中物体的快速准确识别&#xff0c;并通过…

助贷客户管理系统:助力助贷公司轻松实现30%增长目标!

为了解决传统助贷公司在业务过程中遇到的痛点&#xff0c;盛鑫优创科技特别设计了一款定制化的解决方案——"鑫鹿助贷客户管理系统"&#xff0c;以满足助贷行业的独特需求&#xff1a; 传统助贷公司的老板们在做业务的的过程中都有这些痛点&#xff1a; 1、没有一个…

探索5个独特AI工具:它们是否值得独立存在?

在这个“地下AI”系列的最新一集中&#xff0c;我们深入挖掘了一些鲜为人知的AI工具。这些工具并非出自OpenAI、微软或谷歌等科技巨头之手&#xff0c;而是独立创造者和小型团队的智慧结晶。我们的目标是发现利用最新AI技术的独特工具。但这次有个新玩法&#xff1a;我们玩一个…

ABAP 数据写入Excel 并保存 千分位

参考老白 https://www.cnblogs.com/liaojunbo/archive/2011/09/06/2168552.html 但是缺zcl_excel 。需要从 dotabap要引入abap2xlsx 英文版进入后 尝试了一下 1&#xff09;列的宽度自适应么有找到在哪里&#xff1f; 列宽设置 lo_worksheet->set_column_width( ip_co…

生信技能45 - 基于docker容器运行生信软件

1. 获取docker镜像 以运行xhmm CNV分析软件为例。 # 搜索仓库镜像 sudo docker search xhmm# 拉取镜像 sudo docker pull ksarathbabu/xhmm_v1.0# 启动镜像,非后台 sudo docker run -it ksarathbabu/xhmm_v1.0 /bin/bash # -i: 交互式操作。 # -t: 终端。 # ksarathbabu/xhmm…

软件测试经理工作日常随记【2】-接口自动化

软件测试主管工作日常随记【2】-接口自动化 1.接口自动化 jmeter-反电诈项目 这个我做过的一个非常有意义的项目&#xff0c;和腾讯合作的&#xff0c;主要为用户拦截并提示所有可能涉及到的诈骗类型&#xff0c;并以裂变的形式扩展用户&#xff0c;这个项目前期后端先完成&…