第三十五章 Unity人形动画(下)
本章内容主要就是动画数据的独立文件使用方式。有了独立的动画文件,我们就可以将其应用到其他模型上面了。最简单的方式就是,我们可以给其他模型编辑动画控制器的时候,使用这些动画文件。Unity则给我们提供了更加高级的共享方式,就是对动画控制器的共享,也就是说,我们可以将我们刚刚的动画控制器拖拽到其他模型的“Animator”组件的“Controller”栏中去。但是,这里有一个非常重要的前提,就是这些模型的“骨架结构”必须大致保持一致,也就是遵循Unity的人形骨架结构。想要最大程度的共享动画数据(动画文件或者动画控制器),我们就需要将模型本身的“骨架结构”映射到Unity的人形骨架结构上,我们称之为“Avatar”,翻译过来就是“阿凡达”。接下来,我们在重新导入一份“Elf”模型,重新命名文件夹为“Elf3”,如下所示
然后我们点击“Elf.fbx”这个文件,在其Inspector检视视图中进行编辑。
首先取消“Import Animation”选项,也就是不再使用模型里面的动画了。
然后我们需要修改“Animation Type”为“Humanoid”人形动画,
点击“Apply”保存更改。
点击“Apply”保存修改之后,就会出现一个黄色的叹号。这个叹号只是一个警告,并不代表有错误发生。我们只要保证“Configure”的左边是一个“对钩”就可以了。这说明,Unity已经成功识别出我们“Elf”模型中的“骨架结构”。我们可以点击“Configrue”进入看看。
上面截图中,人形图像中关节出的圆点都表示骨骼,绿色就代表模型骨骼和Unity人形骨骼“映射”成功了。这个“映射”会以文件形式保存在“Elf”文件中,如下所示
上图中的“ElfAvatar”就是这个“映射”文件。那如果映射不成功呢?那么,在上面人形图像中错误的关节就会以红色显示,说明Unity并没有找到正确的骨骼。我们以“右手”骨骼为例,来说明这种情况,如下所示:
在上图中,我们点击“右手”骨骼,在下面的列表中,左边的“Hand”就是Unity的人形骨架结构,右边就是模型骨架结构。注意,Unity的人形骨架是不允许修改的,我们要根据Unity的人形骨架找到模型中对应的骨骼。例如,左边的“Hand”应该对应模型中的“Bip001 L Hand”这块骨骼,我们可以在“Hierarchy”视图中找到对应的这块骨骼。
这里,我们就故意修改一下,将“Bip001 L Hand”下面的“Bip001 L Finger0”骨骼拖拽到Unity的“Hand”骨骼位置,如下所示
此时,我们就会发现,出现错误了,对应的关节位置会以红色凸显出来。这说明,Unity人形骨骼与模型人形骨骼匹配不对,需要我们手动修改。因为我们是反向操作的,因此我们只需要将原来的“Bip001 L Hand”拖回到“Hand”位置,就变回正确的绿色了。最后,我们点击Inspector检视面板右下角的“Apply”和“Done”保存后退出去。
关于Unity人形骨架映射问题,我们就大致说到这里。我们继续回到正题上来。我们已经将我们的“Elf”模型修改成了Unity的人形骨架,那么它就能应用其他符合Unity的人形骨架的模型动画了。还记得我们之前的“U_Character_REF.fbx”,它也是一个符合Unity的人形骨架的模型哦。如下所示
既然,“U_Character_REF”和“Elf”都符合Unity的人形骨架,那么“U_Character_REF”的动画,就应该可以应用到“Elf”的身上。接下来,我们将“Elf”拖拽到场景中。
Unity的强大之处在于,不仅可以将动画文件共享给其他模型,就连动画控制器也可以共享给其他模型。也就是说,我们可以给“Elf”添加“Animator”组件,并将之前的动画控制器“U_Character_Animator_Controller”添加到“Animator”组件的“Controller”项目中。最后将我们之前的“U_Character_Animator_Script”脚本也挂载到“Elf”游戏对象上来。这样,两个模型角色就可以同时接受相同的控制,并且做出相同的动画了。如下所示
我们运行工程,查看效果
以上就是Unity的人形动画重定向,是不是感觉非常的不错。但是,我们换一个角度考虑这个问题,游戏如果大量重复使用相同的动画,会不是显得毫无特色。我们游戏开发中,会有很多很多的人物角色,他们可能会有不同的特征,例如种族不同,因此他们在动画设计上应该拥有不同的形式,至少男性和女性的待机,走路,跑步等等动画是不一样的。而且,游戏开发中,除了人物角色(两足类)之外,还有其他非人物的角色,例如一些四足的动画,甚至一些天马行空想象出来的异形怪物,他们的动画设计就只能自己独有的了。因此,游戏开发中的动画重点还是在于“动画控制器”的设计上。关于“动画控制器”的内容,我们只介绍了一小部分,对于“动画层”以及“混合树”还没有介绍,还包括更加复杂的“有限状态机”系统。这些内容我们在后面详细介绍吧。
本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id
相关文章:

第三十五章 Unity人形动画(下)
本章内容主要就是动画数据的独立文件使用方式。有了独立的动画文件,我们就可以将其应用到其他模型上面了。最简单的方式就是,我们可以给其他模型编辑动画控制器的时候,使用这些动画文件。Unity则给我们提供了更加高级的共享方式,就…...
vue导入导出excel、设置单元格背景色、文字居中、合并单元格、设置列宽(使用xlsx库和xlsx-style库)
xlsx xlsx是由SheetJS开发的一个处理excel文件的npm库 适用于前端开发者实现导入导出excel文件的经典需求 为了区别于xlsx文件,突出其应用语言,该库通常又被称为js-xlsx 导出js数据为Excel文件 需要以下步骤: 安装 xlsx 库 你可以使用 …...
java 线程池
线程池 是 一个 容器,其中管理着多个线程(预先创建并维护一定数量的线程),当有一个任务a需要一个线程去完成时,从容器(线程池)中获取一个线程A去执行任务a,当线程A完成任务a后,线程A…...

音频焦点使用及原理
音频焦点使用及原理 本博客代码基于Android 10源码 为什么会有音频焦点这一概念? 在Android音频领域中,应用层所有的App播放音频,最终都是走到音频回播线程PlaybackThread中,如果多个App都走到同一个PlaybackThread中去࿰…...

PyQt5桌面应用开发(8):从QInputDialog转进到函数参数传递
本文目录 PyQt5桌面应用系列How old are you, Dialog?QInputDialog minimalistwhy not lambdaand how partial worksSummary PyQt5桌面应用系列 PyQt5桌面应用开发(1):需求分析 PyQt5桌面应用开发(2):事件…...

2.0 Vue框架设计的核心要素
本章主要讲解,一个好的框架在构建的时候,需要考虑到的要素,包含报错信息反馈、警告信息反馈、减少打包体积、良好的输出、特性开关(兼容)等 1、提升用户开发体验 提升用户开发体验主要体现在用户使用框架进行开发时&…...

“智慧赋能 强链塑链”——精细化工行业仓储物流数字化转型探讨
精细化工行业作为衡量国家化学工业水平高低的重要标志,为国民经济提供重要的终端产品支持,相比较大化工产品,精细化工产品需要高度专业技能和工艺,其生产过程需要复杂的化学反应,以及严格的控制条件,产出的…...

用DG备库做的rman备份恢复一个数据库
环境描述: 1.因为主库存储空间不足,于是将备份放在dg备库上做。 2.主库因为磁盘空间问题,数据文件有两个目录。 3.dg备库因为主库两个数据文件目录里面有两个同名数据文件,所有dg备库也有两个数据文件目录。 4.主库与备库与测…...
JAVA中的IO操作有哪些?
在Java编程语言中,输入/输出(IO)操作是很重要的部分,它允许程序从外部系统读取数据,或将数据输出到外部系统。Java提供了一组强大的IO类库,可以让开发人员方便地进行各种IO操作。 Java中的IO操作可以分为两…...

10:00面试,10:04就出来了 ,问的实在是太...
从外包出来,没想到竟然死在了另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以我也就忍了。没想到12月一纸通知,所有人都不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个…...

wangzherongyao PMO
感谢【五一节】大家的相遇,总结下。 2023年05月02日,【第一组】组队开黑 我总结了下这天为什么打的那么好,首先赛季初段位在王者附近,大家心态重视程度也高,不轻敌,也不盲目,运营好兵线一步一步…...
Dart语法上
一、Dart介绍及环境 1.1 Dart介绍: Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用 和物联网等领域的开发。Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火。直到Flutter的出现现在被人们重新重视。 要学…...

SignOff Criteria——POCV(Parametric OCV) introduction
文章目录 1. O v e r v i e w Overview Overview2. P O C V A n a l y s i s POCV\ Analysis POCV Analysis3. P O C V F l o w POCV\ Flow POCV Flow4. P O C V R e p o r t POCV\ Report POCV Report 1. O v e r v i e w Overview Overview P r o c e s s v a r i a t i…...

Android 内存分析(java/native heap内存、虚拟内存、处理器内存 )
1.jvm 堆内存(dalvik 堆内存) 不同手机中app进程的 jvm 堆内存是不同的,因厂商在出厂设备时会自定义设置其峰值。比如,在Android Studio 创建模拟器时,会设置jvm heap 默认384m , 如下图所示: 当app 进程中java 层 new 对象(加起来总和)占用…...
产品思维与工程师思维
目录标题 什么是产品思维用户痛点体验价值 产品思维与工程师思维有什么区别?产品需要什么能力洞察需求的能力逻辑思维能力成本意识 场景化思维和用户体验数据分析和售后服务数据分析服务大多数用户原则 什么是产品思维 产品思维就是考虑产品的方方面面,…...
Android---启动速度优化
App 启动流程 1. 点击桌面 App 图标,Launcher 进程采用 Binder IPC 向 system_server 进程发起 startActivity 请求 ; 2. system_server 进程接收到请求后,向 zygote 进程发送创建进程的请求; 3. zygote 进程 fork 出新的子进程…...

使用 Mercury 直接从 Jupyter 构建 Web 程序
动动发财的小手,点个赞吧! 有效的沟通在所有数据驱动的项目中都至关重要。数据专业人员通常需要将他们的发现和见解传达给利益相关者,包括业务领导、技术团队和其他数据科学家。 虽然传达数据见解的传统方法(如 PowerPoint 演示文…...

Python基础(二)
目录 一、类型转换 1、为什么需要数据类型转换 2、数据类型转化的函数 3、str()函数类型转换使用 4、int()函数类型转换使用 4.1int()不能将str类型数据转换成int 4.2int()将bool类型转换成int 4.3int()将float转换成int 5、Float()函数类型转换使用 5.1Float()函数不…...
第41讲:Python循环语句中的break-else语法结构
文章目录 1.在循环正常结束后执行动作的思路2.通过控制布尔值变量的方式在循环正常结束后执行某些操作2.1.while循环语句2.2.for-in循环语句3.通过else从句来执行某些操作1.在循环正常结束后执行动作的思路 在执行while循环语句或者for循环语句时,如果循环是正常结束的,非执…...
双系统-真机安装ubuntu
服务器系统最好选择legacy启动mbr硬盘,数据盘可以使用gpt格式,超过2t的只能用gpt。 华为2288v3用uefi找不到启动硬盘,或者是找到硬盘后无法引导,迁移系统得到有efi引导文件的硬盘也不行,选择用legacy吧。 ubuntu默认uefi启动,若使用legacy,则需要easybcd处理一下引导。 …...

利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析
1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具,该工具基于TUN接口实现其功能,利用反向TCP/TLS连接建立一条隐蔽的通信信道,支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式,适应复杂网…...
电脑插入多块移动硬盘后经常出现卡顿和蓝屏
当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
GitHub 趋势日报 (2025年06月06日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...