当前位置: 首页 > news >正文

第三十五章 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中去&#xff0…...

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处理一下引导。 …...

synchronized 学习

学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...

GitHub 趋势日报 (2025年06月08日)

📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

C++ 设计模式 《小明的奶茶加料风波》

👨‍🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...

区块链技术概述

区块链技术是一种去中心化、分布式账本技术,通过密码学、共识机制和智能合约等核心组件,实现数据不可篡改、透明可追溯的系统。 一、核心技术 1. 去中心化 特点:数据存储在网络中的多个节点(计算机),而非…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践

前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...