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

第三十二章 Unity Mecanim动画系统(上)

在上一章节中,我们介绍了Unity的旧版动画系统,本章节来介绍新版的Mecanim动画系统。新版的Mecanim动画系统实际是对旧版动画系统的升级。新版的Mecanim动画系统仍然是建立在动画片段的基础上的,只不过它给我们提供了一个可视化的窗口来编辑动画片段之间的切换逻辑。接下来,我们重新创建一个新的场景“SampleScene2.unity”。为了能够做区分,我们重新复制一份新的Elf的FBX文件到当前工程来。

 

接下来,我们选中“Elf2”里面的FBX文件,查看Inspector检视视图,

这里我们选择默认的“Generic”即可使用新版的Mecanim动画系统。然后我们再去“Animation”中重新分割四个动画片段,这个过程不再详细介绍了。

分割完毕,为了不混淆,我们给动画片段起了新的名字。接下来,我们将Elf2下的FBX文件拖拽到新场景中来。

我们上一个章节中介绍了,旧版动画系统使用的是“Animation”组件,而新版的动画系统使用的是“Animator”组件。因此,我们给“Elf”游戏对象添加这个组件,如下

关于这个Animator组件,我们简单介绍一下。

首先介绍一下“Apply Root Motion”勾选项,如果勾选的话,行走动画的播放会同步调整Transform组件。如果不勾选的话,播放行走动画的时候,需要我们使用代码来控制Transform组件。动画片段中本身就是移动,旋转和缩放矩阵,因此使用动画片段播放的同时,是可以根据片段中的矩阵来同步Transform组件中的移动,旋转和缩放的。

然后再说一下Update Mode这个选项。Normal表示动画使用update方法进行更新。这个应该是默认吧。Animate Physics表示使用FixUpdate方法进行更新,一般用于和物体有交互的情况下。UnScaleTime表示无视timeScale进行更新,一般用于UI动画。

最后再说一下Culling model,它用来控制角色在场景中动画显示方式。默认值Always Animate表示角色总是会执行动画,即使角色不在摄像机范围内也执行动画。BaseOnRender表示当角色不在摄像机范围内时,角色仅仅播放自身带有Root Motion,而身体中的其他动画就不播放。

接下来,我们介绍“Animator”组件的第一个参数就是“Controller”,也就是动画控制器。它本质是一个文件,但是需要我们使用“Animator”窗口来编辑。请注意哦,一个是“Animator”组件,一个是“Animator”窗口,两者是不一样的。首先,我们在Asset资源面板中创建一个动画控制器,右击Asset资源面板空白处,选择“Create”->“Animator Controller”,我们将其重命名为“GenericAnimatorController”,它的文件类型后缀为“.controller”,我们也可以到工程目录的Asset文件夹下看到这个文件。

创建该文件完毕后,我们双击打开它,Unity会自动启动“Animator”窗口来打开它。

如上图所示,这个“Animator”窗口分为左右两部分,左边是动画层和动画参数编辑区域,右边是动画剪辑编辑区域。右边的区域可以使用鼠标滚轮进行缩放,也可以按下鼠标滚轮来拖动。我们首先介绍右边的区域,里面可以看到三个不同颜色的圆角矩形块,我们称之为“动画状态机”,其实可以简单理解为一个动画片段(两者概念相似)。“Any State”代表任意一个动画状态(动画片段),其作用是指向的动画片段在任意时刻都可以切换过去的状态,当然也包含自己切换自己。“Entry”表示进入“动画状态机”的默认动画状态(动画片段),该状态连接的动画片段就是进入状态机后要执行的第一个播放的动画片段。而“Exit”则表示离开“动画状态机”的动画状态(动画片段)。如果一个动画片段指向该出口,表示可以通过该状态退出当前动画状态机。既然是编辑动画片段,我们就先将动画片段拖拽进来吧。

我们选中“idle2”,“walk2”,“run2”和“dead2”四个动画片段,然后拖拽到“Animator”窗口右边的编辑区域。

拖拽进来之后,我们发现Unity自动会将“Entry”的状态机连接到其中某一个动画片段,例如“dead2”这个动画片段。它代表的意思就是默认动画(橙色表示默认动画),回想一下我们使用“Animation”组件的时候,同样也设置过默认动画,道理是一样的。很显然,死亡动画是不对的,应该是待机动画“idle2”,如何修改呢?非常简单,我们只需要在“idle2”上右击,然后选择里面的“Set as Layer Default State”即可,如下所示:

 

因为默认动画只有一个,因此,当我们设置idle2为默认动画的时候,之前的dead2就不是默认动画了,它从橙色变回了灰色。既然有了默认动画,那我们就看看如何播放它吧。回到我们的Scene视图,将我们的动画控制器“GenericAnimatorController.controller”文件拖拽到Elf游戏对象的Animator组件下的Controller项目下,

接下来,我们就可以运行工程,查看效果了。

我们的默认动画“idle2”已经可以播放了。那么问题来了,如何播放其他动画呢?我们还需要回到“Animator”窗口中继续编辑我们的“GenericAnimatorController.controller”文件。在大部分的游戏中,基本上游戏角色默认都是待机状态,然后从待机状态切换到走路或者跑步状态。因此,我们可以从待机“idle2”向走路“walk2”和跑步“run2”分别做两个“Transiton”,翻译过来就是“过渡”的意思。其实,我们仔细想想,动画播放的本质就是从一个动画片段“过渡”到另一个动画片段。动画逻辑的复杂度也就在于此了,大量的“过渡”就会造成我们的动画播放逻辑非常的混乱。如何创建“idle2”到“walk2”的“Transiton”呢?我们在“idle2”上面右击,选择其中的“Make Transiton”,如下所示:

点击“Make Transiton”之后,我们移动鼠标,就会出现一条带箭头的线,

我们将线放置到“walk2”上面后鼠标点击完成,这样就完成了idle2到walk2的连接。我们继续右击idle2选择“Make Transiton”,将线放置到run2上面后鼠标点击完成。这样,我们就建立了两条“过渡”线了。

默认情况下,线是白色的,如果我们点击其中一条线的话,就会以蓝色显示。如果我们创建错的线,可以选择该线(蓝色显示)后按“delete”键删除即可。现在,我们已经创建了idle2到walk2和run2的过渡了,那么什么情况下回执行idle2到walk2的过渡呢?又会在什么情况下执行idle2到run2的过渡呢?这时候,我们需要继续设置“过渡条件”。这条线相当于一座桥,连同两个动画片段,而“过渡条件”就是“通行证”,有了对应的“通行证”,才能决定是idle2切换到walk2,还是idle2切换到run2。如何设置这个“过渡条件”呢?由于该部分内容太多了,我们下个章节继续介绍。

本课程涉及的内容已经共享到百度网盘:https://pan.baidu.com/s/1e1jClK3MnN66GlxBmqoJWA?pwd=b2id

相关文章:

第三十二章 Unity Mecanim动画系统(上)

在上一章节中,我们介绍了Unity的旧版动画系统,本章节来介绍新版的Mecanim动画系统。新版的Mecanim动画系统实际是对旧版动画系统的升级。新版的Mecanim动画系统仍然是建立在动画片段的基础上的,只不过它给我们提供了一个可视化的窗口来编辑动…...

第二章 集合

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…...

这一篇Databinding应该可以帮助迅速上手吧

Databinding使用篇(迅速上手) 使用前需要在模块级别的build.gradle里面的android闭包里添加: dataBinding{enabled true}接着在layout文件中按下Alt 回车, 将布局转换成data binding layout即可,此时编译就会生成对…...

【PHP在线定制商城网站源码V3.0】开源的DIY在线定制商城系统+在线礼品定制

源码下载:https://download.csdn.net/download/m0_66047725/87637177 PHP在线定制商城网站源码,免费开源、免费下载。本商城基于mycncart开发。安装成功后即可浏览,你可以在后台->安装扩展功能上传安装插件,在代码调整中点击刷…...

cout源码浅析

目录 cout源码浅析 那么对于没有定义在这之中的要怎么办呢? 实际使用 结语 首先来看我从cplusplus中截取的这张图: 注意最下面这一行字。cout其实是ostream的一个标准对象object。而上面则演示了一些继承关系。 好的,理解了之后&#xf…...

发送Ajax get请求详解

发送AJAX get请求&#xff0c;前端代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <title>ajax get请求</title> </head> <body> <script type"text/java…...

SQL语句

创建及删除数据库和表 CREATE DATABASE 数据库名; CREATE DATABASE school; 创建新的表 CREATE TABLE 表名(字段1 数据类型,字段2 数据类型[,...] [,PRIMARY KEY (主键名)]); #主键一般选择能代表唯一性的字段&#xff0c;不允许取空值(NULL)&#xff0c;值也不允许重复&…...

Mysql 学习(八)单表查询方法二

复杂查询 上一节说了5种访问类型的查询&#xff0c;这一节就来说说关于这些比较复杂的查询 情况一&#xff1a;多个二级索引查询 sql&#xff1a;SELECT * FROM index_value_table WHERE value1 abc AND value2 > 1000;搜索条件&#xff1a; value1 等于 abcvalue2 大于…...

安卓系统下的截屏和录屏

可以抓取手机屏幕画面&#xff08;屏幕截图&#xff09;&#xff0c;也可以录制屏幕画面视频。拍摄屏幕后&#xff0c;可以查看、编辑和分享所拍的图片或视频。 抓取屏幕截图 打开要抓取的屏幕。视手机情况执行下列一个操作&#xff0c;3种方法看你手机有效的&#xff1a; 同…...

行为型模式-中介者模式

中介者模式 概述 一般来说&#xff0c;同事类之间的关系是比较复杂的&#xff0c;多个同事类之间互相关联时&#xff0c;他们之间的关系会呈现为复杂的网状结构&#xff0c;这是一种过度耦合的架构&#xff0c;即不利于类的复用&#xff0c;也不稳定。例如在下左图中&#xf…...

辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-功能ODD定义

1.系统定义 智能驾驶系统包含行车场景功能和泊车场景功能,行车场景功能包括安全ADAS功能、基础ADAS功能和高阶ADAS功能三大类,本文档定义高阶ADAS功能中的导航辅助驾驶功能用例。 1.1.高阶ADAS功能列表 功能需求ID 功能分类 功能名称...

PMP/高项 06-项目成本管理

项目成本管理 概念 项目成本管理 项目成本管理又被称为项目造价管理&#xff0c;是有关项目成本和项目价值两个方面的管理&#xff0c;是为保障以最小的成本实现最大的项目价值而开展的项目专项管理工作。 确保在批准的项目预算内完成项目 成本管理内容 规划成本管理 制定项目…...

XXL-JOB中间件【实现分布式任务调度】

目录 1&#xff1a;XXL-JOB介绍 2&#xff1a;搭建XXL-JOB 2.1&#xff1a;调度中心 2.2&#xff1a;执行器 2.3&#xff1a;执行任务 3&#xff1a;分片广播 1&#xff1a;XXL-JOB介绍 XXL-JOB是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学…...

Vue3+Element Plus环境搭建和一键切换明暗主题的配置

Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。而Element Plus是一款基于Vue3面向设计师和开发者的组件库。 最终效果&#xff1a; 环境搭建 已安装 16.0 或更高版本的 Node.js&#xff0c;终端&#xff1a; npm init vuelatest这一…...

Leetcode326. 3 的幂

Every day a leetcode 题目来源&#xff1a;326. 3 的幂 相似题目&#xff1a;342. 4的幂 解法1&#xff1a;递归 代码&#xff1a; /** lc appleetcode.cn id326 langcpp** [326] 3 的幂*/// lc codestart class Solution { public:bool isPowerOfThree(int n){if (n <…...

【运动规划算法项目实战】如何在栅格地图中实现Dijkstra算法

文章目录 简介一、算法介绍1.1 Dijkstra算法流程1.2 Dijkstra算法伪代码二、代码实现2.1 ROS实现2.2 RVIZ演示三、总结简介 Dijkstra算法是一种用于图中单源最短路径的贪心算法。在计算机科学和网络设计中广泛应用。该算法从起点开始,通过优先选择距离起点最近的未标记节点来…...

【算法】一文彻底搞懂ZAB算法

文章目录 什么是ZAB 算法&#xff1f;深入ZAB算法1. 消息广播两阶段提交ZAB消息广播过程 2. 崩溃恢复选举参数选举流程 ZAB算法需要解决的两大问题1. 已经被处理的消息不能丢2. 被丢弃的消息不能再次出现 最近需要设计一个分布式系统&#xff0c;需要一个中间件来存储共享的信息…...

【软考高级】2022年系统分析师综合知识

1.( )是从系统的应用领域而不是从系统用户的特定需要中得出的&#xff0c;它们可以是新的功能性需求&#xff0c;或者是对已有功能性需求的约束&#xff0c;或者是陈述特定的计算必须遵守的要求。 A.功能性需求 B. 用户需求 C.产品需求 D.领域需求 2.对于安全关键系…...

关于AI未来的思考和应用场景

关于AI未来的思考和应用场景 AI&#xff08;人工智能&#xff09;是当今最热门的技术领域之一&#xff0c;它已经在多个领域产生了深远的影响&#xff0c;如医疗、金融、制造业等。未来&#xff0c;AI将继续发展&#xff0c;并在更多领域产生重要的影响。 AI的未来发展方向有…...

智慧城市规划数字化管理:数字孪生技术的创新应用

随着智能城市的不断发展&#xff0c;数字孪生技术也开始在智慧城市的建设中得到了广泛应用。数字孪生作为一种数字化的复制技术&#xff0c;它可以模拟真实世界中的实体和过程。 在城市规划方面&#xff0c;数字孪生可以帮助城市规划师更加直观地了解城市的整体规划和发展趋势&…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试&#xff0c;通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小&#xff0c;增大可提高计算复杂度duration: 测试持续时间&#xff08;秒&…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...

【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL

ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...