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

news2024/12/25 22:30:56

如何使用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.coloradmin.cn/o/1647900.html

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

相关文章

MFC扩展库BCGControlBar Pro v34.1 - 可视化设计器、主题新升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v34.1已正式发布了&#xff0c;这个版本包含了对Windows 10/11字体图标的支持、功能区和…

国内小白用什么方法充值使用ChatGPT4.0?

首先说一下IOS礼品卡订阅&#xff0c;目前最经济实惠的订阅方式&#xff0c;具体操作步骤 使用IOS设备充值&#xff0c;用 App Stroe 兑换券 1、支付宝地址切换旧金山&#xff0c;在里面买app store 的兑换卷 2、美区Apple ID登陆app store &#xff0c;充值兑换券 3、IOS设…

AI 数据观 | TapData Cloud + MongoDB Atlas:大模型与 RAG 技术有机结合,落地实时工单处理智能化解决方案

本篇为「AI 数据观」系列文章第二弹&#xff0c;在这里&#xff0c;我们将进一步探讨 AI 行业的数据价值。以 RAG 的智能工单应用场景为例&#xff0c;共同探索如何使用 Tapdata Cloud MongoDB Atlas 实现具备实时更新能力的向量数据库&#xff0c;为企业工单处理的智能化和自…

7款AI绘画软件推荐,必备工具,一键生成绘画

随着人工智能技术的不断发展&#xff0c;AI绘画软件在艺术创作中扮演着越来越重要的角色。这些软件利机器学习和深度学习算法&#xff0c;可以模仿艺术家的风格&#xff0c;并生成逼真的绘画作品。一起来见证下吧&#xff0c;先给大家展示下AI绘画生成的效果图&#xff1a; 一、…

边界框(bounding box) 目标物体的位置和大小 交并比(Intersection over Union,IoU) 锚框(Anchor box)

边界框(bounding box) 在检测任务中,我们需要同时预测物体的类别和位置,因此需要引入一些跟位置相关的概念。通常使用边界框(bounding box,bbox)来表示物体的位置,边界框是正好能包含物体的矩形框。 在目标检测任务中,边界框(bounding box,bbox)是一个非常重要的…

RS232/RS485转12路模拟信号隔离D/A转换器4-20mA0-20mA0-25mA0-5V0-10V0-75mV

特点&#xff1a; ● RS-485/232接口&#xff0c;隔离转换成12路标准模拟信号输出 ● 可选型输出4-20mA或0-10V控制其他设备 ● 模拟信号输出精度优于 0.2% ● 可以程控校准模块输出精度 ● 信号输出 / 通讯接口之间隔离耐压3000VDC ● 宽电源供电范围&#xff1a;10 ~ …

git与gitlab

目录 gitlab 下载与安装 重置管理员密码 gitlab命令 git远程gitlab相关命令 认证 补充 git git 分布式版本控制 安装 git的四个区域与文件的四个状态 使用git 常用命令 git 分布式管理系统 gitlab 企业私有库 github 公网共享库&#xff0c;全球…

2024五一赛数学建模ABC题成品论文word+完整代码数据汇总

2024五一赛A题参考论文42页1-3问可执行代码[py Mtlab双版本]各类可视化图表https://www.jdmm.cc/file/27105852024五一赛B题保姆级建模思路32页可执行代码[py mtlab]后续成品论文处理可视化图表https://www.jdmm.cc/file/27105862024五一赛C题成品论文23页word页1-3问可执行代码…

亚马逊自养号测评环境搭建需要准备哪些?

在当下电商领域竞争白热化的背景下&#xff0c;亚马逊平台的卖家们对流量之于店铺转化率的重要性有着深刻的认识。随着对平台内部流量的依赖逐渐减弱&#xff0c;他们纷纷寻求更多元化的途径来提升销售业绩和品牌的市场影响力。在此过程中&#xff0c;自养号测评成为了一种备受…

alphassl ocsp泛域名证书

泛域名SSL证书又可以称之为通配符SSL证书&#xff0c;这款SSL数字证书可以同时保护主域名以及主域名下的所有子域名&#xff0c;被广泛应用于各种类型的网站&#xff0c;为多个网站提供安全服务。AlphaSSL是比较知名的SSL证书品牌之一&#xff0c;旗下的OCSP泛域名SSL证书比较受…

linux——主从同步

1. 保证主节点开始二进制日志&#xff0c;从节点配置中继日志 2. 从节点的开启一个 I/O 线程读取主节点二进制日志的内容 3. 从节点读取主节点的二进制日志之后&#xff0c;会将去读的内容写入从节点的中继日志 4. 从节点开启 SQL 线程&#xff0c;读取中继日志的内容&a…

计算机视觉中的计算几何

计算几何领域出现于 20 世纪 70 年代&#xff0c;研究解决几何问题的数据结构和算法。这尤其包括确定图像内的拓扑结构&#xff0c;或者实际上是更高维的表示&#xff0c;例如点邻域&#xff0c;这可以帮助从数字图像数据等中导出几何意义[1]。 计算机视觉主要涉及静态或动态图…

利用傅里叶变换公式理解camera raw中的纹理和清晰度的概念(可惜的是camera raw的计算公式应该不会是这个傅里叶变换,只能说类似于这里的效果)

知乎说&#xff1a;在Adobe官方的解释中&#xff0c;就像图片可以分解成彩色通道&#xff08;如&#xff1a;红绿蓝通道&#xff09;&#xff0c;同样的&#xff0c;图片也可以分解成不同的频率&#xff0c;一张图片可以是由高频&#xff0c;中频和低频组成&#xff0c;例如&am…

500 Internal Server Error问题

总结 mysql语句有问题 #前端报错#后端报错 SQL错误&#xff0c;sql的where条件不全 delete from dish.flavor where dish.id#修改一番 #将in加上即可

如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

uniapp/微信小程序实现加入购物车点击添加飞到购物车动画

1、预期效果 2、实现思路 每次点击添加按钮时&#xff0c;往该按钮上方添加一个悬浮元素&#xff0c;通过位移动画将元素移到目标位置。 1. 为每个点击元素设置不同的class&#xff0c;才能通过uni.createSelectorQuery来获取每个元素的节点信息&#xff1b; 2. 添加一个与…

websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步

文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结&#xff08;陈硕老师的总结&#xff09; 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段&#xff1a;数据准备和数据读写。 我们的网络IO…

Redis教程——主从复制

在上篇文章我们学习了Redis教程——管道&#xff0c;这篇文章学习Redis教程——主从复制。 主从复制 为了数据更加安全可靠&#xff0c;在实际的项目中&#xff0c;肯定是有多个Redis服务&#xff0c;主机Redis以写为主&#xff0c;从机Redis以读为主&#xff0c;当主机Redis…

什么年代了,还在拿考勤说事

最近&#xff0c;看到了某公司的一项考勤规定&#xff1a;自然月内&#xff0c;事假累计超过3次或者累计请假时间超过8小时的&#xff0c;不予审批&#xff0c;强制休假的按旷工处理。 真的想吐槽&#xff0c;什么年代了&#xff0c;还在拿考勤说事&#xff0c;这是什么公司、什…

国内游戏公司Q1净利润大增40%以上,神州泰岳增幅65.62%

易采游戏网5月7日消息&#xff0c;近日多家国内知名游戏公司公布了其2024年第一季度的财务报告&#xff0c;其中净利润大增40%以上的数据引起了市场的广泛关注。这一业绩表现不仅远超市场预期&#xff0c;也再次证明了国内游戏行业的强劲增长势头。 据了解&#xff0c;这些游戏…