【unity小技巧】使用Unity的Animation Layer和Avatar Mask把多个不同动画组合使用,实现人物不同部位播放不同的动画

news2024/12/22 20:02:06

文章目录

  • 前言
  • 如何使用Unity的Animation Layer和Avatar Mask把多个动画组合使用
  • 游戏角色的疲劳感是如何制作的?利用Animation Layers中的additive模式把多个动画混合在一起
  • 如何制作角色的受伤状态?Unity动画层级(Animation Layer)的Sync和Timing介绍
  • 新问题,那就是角色在受伤的状态下拿不起枪来了
  • 参考
  • 完结

前言

在游戏制作中有一种需求非常常见,那就是把两个或者多个动画组合在一起,比如我需要玩家持枪行走,但是我手里只有玩家持枪战力的动画,以及空手行走的动画,那么我就必须把这两个动画组合到一起使用,针对这种动画缝合怪的需求,在Unity中最方便的解决方案,就是使用动画层级Animation Layer以及替身蒙版Avatar Mask

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

比如我需要玩家持枪行走,但是我手里只有玩家持枪站立的动画以及空手行走的动画
在这里插入图片描述
那么我就必须把这两个动画组合到一起使用
在y中最方便的解决方案就是使用动画层级animation layer以及替身蒙版avatar mask
在这里插入图片描述
如果我们当前使用了humanoid动画
那么我们就配置上面这里的humanoid
点击这些身体部位
绿色表示会播放动画
红色表示不会播放
点击周围可以一次性全选或一次性反选
我们要播放的是手部动画
所以选择这里的胳膊和手以及这两个IK
在这里插入图片描述
如果我们当前播放的不是humanoid动画,则可以展开下面的transforms来选择哪些骨骼节点受影响
哪些骨骼节点不受影响,我们可以在这里拖入这些骨骼所对应的avatar,然后点击这里获得它的骨骼结构
在这里插入图片描述
配置动画层级,为覆盖模式
在这里插入图片描述
新增持枪动画
在这里插入图片描述
可以看到当Rifle=true时,双手变成了持枪动画
在这里插入图片描述

游戏角色的疲劳感是如何制作的?利用Animation Layers中的additive模式把多个动画混合在一起

当我们要为当前的角色动画添加某种特色而又不希望取代现有动画时可以考虑使用additive模式
最常见的例子就是为角色添加“疲劳感“

那就让我们来着手为当前这个游戏角色增加一点疲劳感

新增疲劳层级,放置气喘吁吁的动画,通过控制这个权重值实现不同的疲劳程度
在这里插入图片描述
拖动一下weight,可以看到随着weight的增加,角色喘气的幅度越来越大了

在这里插入图片描述
那么我们再通过脚本为角色添加疲劳值的概念吧
站立不动的时候疲劳值会降低每秒降低“1”点,行走时疲劳值不变,奔跑时疲劳值增加
在这里插入图片描述

在这里插入图片描述
随着我们的奔跑,疲劳值在提升,喘气的幅度也在提升
停下来之后可以看到喘气的幅度由大变小直到消失
在这里插入图片描述

如何制作角色的受伤状态?Unity动画层级(Animation Layer)的Sync和Timing介绍

玩家角色在游戏过程中总是会受到各种各样的伤害
那么很多游戏就会用角色外观来直接表达玩家当前所受到的伤害程度,就是用一整套不同的受伤动画代替原有的动画
那么在一个新的layer里复制一整套原有层级的状态机,就是一个非常好的解决方案
比如我们现在就新建一个层级取名叫injured,用来表现角色受伤后的所有动画状态,然后在原来的层级这里全选所有的状态,然后按control c复制回到injury这一层
按control v粘贴,如果默认初始状态有变化的话,我们就重新选择一下
这样我们就得到了一个和原来层级一模一样的动画层级
在这里插入图片描述
但是这样做有一个问题,那就是随着开发的进行,原本的层级可能会有变化
那么此时就需要修改对应的injured layer中内容,如果变化过于频繁的话,则极有可能给开发者带来混乱
所以unity为我们在这里提供了一个同步功能,我们只需要在这里选择injured这一层,需要和哪个层级同步就可以了
那么在接下来的开发过程中,无论被指定的这一层级结构如何改变,injured layer都始终会与它保持一致
在这里插入图片描述
那么现在就让我们正式的新建一个层级来表现角色受伤情况下的移动情况
我们需要替换全身的动画,所以不需要avatar mask,blending模式我们选择override,IK pass我们勾选上
把weight调整到零
在这里插入图片描述
但是层级的同步仅仅是同步动画状态和动画状态间的转换关系,并不会同步blend tree的内容
所以在injured layer这里的这个locomotion状态是空的
我们需要新建里面的blend tree我们把之前在mixamo上下载好的受伤待机、受伤行走、和受伤奔跑动画片段放进去
根据他们自身的位移情况计算一下阈值
在这里插入图片描述
我们可以看出受伤后移动的速度确实会比没受伤的动画要慢很多
那么我们就假设当前这个游戏里角色受伤后移动速度会变成原来的百分之六十
我们之前设计的行走速度是1.5
那么这里就应该是1.50.6/0.966
在这里插入图片描述
我们在这里把阈值改成1.5
0.6

在这里插入图片描述

跑步也是
那么这里就应该是3.50.6/1.577374
我们把阈值改成3.5
0.6=2.1
在这里插入图片描述
效果
在这里插入图片描述
问题,比如受伤行走动画比原来行走动画可能播放时间短,按理说受伤行走动画应该是无法完美同步覆盖行走动画的才对,那么unity是如何解决这个问题的呢?

在默认情况下,sync layer中的动画状态的时长会被缩放至它所需要同步的层级中对应动画状态的时长

也就是说这里的受伤行走动画会被拉长与行走动画时间一样
在这里插入图片描述
如果我想反过来同步动画播放时长要怎么做呢?

一旦勾选了timing动画状态的播放时长就由他和被他同步的层级共同决定了
在这里插入图片描述
那么到底哪个层级的决定权更大一些呢
看这里的权重,当权重为一时,全都听当前这一层的,当权重为零时,全都听被同步的这一层的

新问题,那就是角色在受伤的状态下拿不起枪来了

在这里插入图片描述
在动画层级中位于下面的层级拥有更高的优先级,injured这一层拥有最高的播放优先级,它会代替的其他的所有动画
如果权重为一,那么代替的程度就为百分百,代替的部位呢则是全身
那么要解决我们之前遇到的问题就很简单了
我们把它拖上来,放到第二这个位置上
在这里插入图片描述
这样持枪动画的优先级就比上面两个要高了
在这里插入图片描述

参考

https://www.bilibili.com/video/BV1gT4y1k7EZ

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!如果你遇到任何问题,也欢迎你评论私信或者加群找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~
在这里插入图片描述

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

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

相关文章

在stable diffussion中控制生成图片的光线

在摄影中,光线起着至关重要的作用,它对图像的整体质量和氛围有着显著的影响。您可以使用光线来增强主题,创造深度和维度,传达情感,以及突出重要细节。 在这篇文章中,我会告诉你如何在stable diffussion中控…

【C++11】深入理解与应用右值引用

🔥 个人主页:大耳朵土土垚 🔥 所属专栏:C从入门至进阶 这里将会不定期更新有关C/C的内容,欢迎大家点赞,收藏,评论🥳🥳🎉🎉🎉 文章目录…

webCppCluster

1.通讯协议、接口协议、数据传输格式之间的区别? 通讯协议 在TCP/IP四层模型中,四层分别是:应用层、传输层、网络层、网络接口层。 应用层通讯协议的代表:HTTP HTTPS 主要规定传输消息的具体内容、什么格式传输、是请求还是相应…

ueditorplus百度编辑器集成秀米及135编辑器

备用地址:ueditorplus百度编辑器集成秀米及135编辑器 下载拉取:ueditorplus: UEditorPlus 是基于 UEditor 二次开发的富文本编辑器,让 UEditor 焕然一新,已集成秀米、135编辑器,会不定时更新!!&#xff01…

MobaXterm 终端工具使用

文章目录 MobaXterm 相关介绍下载安装 MobaXterm添加 SSH 连接 MobaXterm 相关介绍 MobaXterm 是一款功能强大的终端仿真器和远程计算工具,专为 Windows 用户设计,提供了一站式解决方案,以便在本地和远程计算环境中工作。它结合了终端仿真、S…

C++设计模式——Chain of Responsibility职责链模式

一,职责链模式的定义 职责链模式,又被称为责任链模式,是一种行为型设计模式,它让多个对象依次处理收到的请求,直到处理完成为止。 职责链模式需要使用多个对象,其中的每个对象要么处理请求,要…

『功能项目』坐骑UI搭建及脚本控制显/隐【19】

本章项目成果展示 我们打开上一篇18怪物消亡掉落宝箱的项目, 本章要做的事情是搭建一个坐骑UI界面,并通过键盘B键/右侧坐骑按钮控制坐骑UI界面的显示与隐藏 在背包Bag上创建一个父物体, 命名为Middle 修改Bag的尺寸 将下面资源图片放进Art文…

开源|FormCreate低代码表单在弹窗中渲染表单时表单的值没有正常清空解决方法

如何在弹窗中通过低代码表单 FormCreate 渲染表单&#xff0c;包括表单的配置、表单验证、以及表单提交的处理。 源码地址: Github | Gitee <template><div><!-- 触发弹窗的按钮 --><el-button type"primary" click"showDialog true&quo…

国家商用密码算法——SM1、SM2、SM3

1、SM1 SM1 是中国国家密码管理局&#xff08;SCA&#xff09;发布的国密算法之一&#xff0c;属于对称加密算法&#xff0c;其分组长度、秘钥长度都是128bit。 【注】对称加密算法是一种使用相同密钥进行数据加密和解密的加密方式。在这种算法中&#xff0c;发送方和接收方共…

将本地的 IntelliJ IDEA 项目导入到 GitLab 上——超详细图文教程

要将本地的 IntelliJ IDEA 项目导入到 GitLab 上&#xff0c;可以按照以下详细步骤进行操作&#xff1a; 1. 在 GitLab 上创建一个新的仓库 打开 GitLab 或公司内部的 GitLab 服务器。 登录你的 GitLab 账号。 点击右上角的 号按钮&#xff0c;然后选择 “New Project”。 …

清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现 及 通过使用文件或者套节字来识别进程的fuser命令

一、清华MEM作业-利用管理运筹学的分析工具slover求解最优解的实现 最近又接触了一些线性求解的问题&#xff0c;以前主要都是在高中数学里接触到&#xff0c;都是使用笔算&#xff0c;最后通过一些函数式得出最小或者最大值&#xff0c;最近的研究生学业上接触到了一个Excel s…

C++入门基础知识50——【关于C++数字】之C++ 数学运算

成长路上不孤单&#x1f60a;【14后&#xff0c;C爱好者&#xff0c;持续分享所学&#xff0c;如有需要欢迎收藏转发&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#xff01;&#xff01;&#xff01;&#xff01;&#xff…

C++string类相关OJ练习(2)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 Cstring类相关OJ练习(2) 收录于专栏【C语法基础】 本专栏旨在分享学习C的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1.反转字符串 …

录屏软件电脑,精选5款录屏神器推荐

嘿&#xff0c;朋友们&#xff01;想象一下&#xff0c;你正在与好友分享你最新的游戏成就&#xff0c;或是与同事展示你的最新项目进展&#xff0c;但却发现文字描述无法完美呈现你的精彩瞬间。别担心&#xff0c;在这个数字化的时代&#xff0c;我们有着无数种方式记录和分享…

大型集团行业ITSM案例分析报告

一、项目背景 随着信息化建设的不断推进&#xff0c;大型集团的信息系统规模迅速扩大&#xff0c;业务系统对IT的依赖程度逐渐加深&#xff0c;IT网络应用系统的复杂度也随之增加。然而&#xff0c;相对滞后的运维服务体系却未能同步跟进&#xff0c;运维要求不断提高的同时&a…

SparkRA带你读论文 | 如何训练数据高效的 LLMs

简介 How to Train Data-Efficient LLMs 论文作者&#xff1a; Noveen Sachdeva, Benjamin Coleman, Wang-Cheng Kang, Jianmo Ni, Lichan Hong Ed H. Chi, James Caverlee, Julian McAuley, Derek Zhiyuan Cheng 论文链接&#xff1a; https://arxiv.org/pdf/2402.09668.pd…

Java CRM客户关系管理系统源码:基于Spring Cloud Alibaba与Spring Boot,专为成长型企业设计

项目名称&#xff1a;CRM客户关系管理系统 功能模块及描述&#xff1a; 一、待办事项 今日需联系客户&#xff1a;显示当日需跟进的客户列表&#xff0c;支持查询和筛选。分配给我的线索&#xff1a;管理分配给用户的线索&#xff0c;包括线索列表和查询功能。分配给我的客户…

Hive数据库与表操作全指南

目录 Hive数据库操作详解 创建数据库 1&#xff09;语法 2&#xff09;案例 查询数据库 1&#xff09;展示所有数据库 &#xff08;1&#xff09;语法 &#xff08;2&#xff09;案例 2&#xff09;查看数据库信息 &#xff08;1&#xff09;语法 &#xff08;2&#…

【免费分享】嵌入式Linux开发板【入门+项目,应用+底层】资料包一网打尽,附教程/视频/源码...

想要深入学习嵌入式Linux开发吗&#xff1f;现在机会来了&#xff01;我们为初学者们准备了一份全面的资料包&#xff0c;包括原理图、教程、课件、视频、项目、源码等&#xff0c;所有资料全部免费领取&#xff0c;课程视频可试看&#xff08;购买后看完整版&#xff09;&…

U盘提示需要格式化才能使用怎么办?教你轻松应对

U盘作为一种便捷的数据存储设备&#xff0c;广泛应用于日常工作和生活中。然而&#xff0c;有时我们会遇到U盘插入电脑后提示需要格式化才能使用的情况&#xff0c;这让人倍感焦虑&#xff0c;因为格式化往往意味着数据丢失。不过&#xff0c;在采取极端措施之前&#xff0c;我…