UE4_动画基础_ 使用分层动画(Using Layered Animations)

完成在移动过程中武器发射的角色制作!

动画混合仅仅意味着在一个角色或骨架网格体上的两个或多个动画之间进行平滑过渡。在虚幻引擎4中,有多种方法可以应用这种混合,要么通过混合空间,或通过实际组合两个基于加权偏差或alpha值的动画的叠加方法,甚至通过应用现有姿势的直接覆盖。

您还可以直接将动画发送到骨架中的特定骨骼及其所有子项。例如,您可以从包含一个正在奔跑的角色的动画开始,然后有选择地向角色上身应用一个射击动画。最终的结果将是一个可以边奔跑边射击的角色,类似于下面的图片:

完成步骤:

一、设置要混合的动画

在此步骤中,我们要更改默认玩家角色,并为我们想要在移动动画上叠加的动画层创建一个动画蒙太奇。

您可以从Epic Launcher的 市场(Marketplace) 免费下载动画初学者包。

1、打开项目后,在 内容浏览器(Content Browser) 中的 Content/ThirdPersonBP/Blueprints 文件夹下,打开 第三人称游戏模式(ThirdPersonGameMode) 蓝图。

2、在 默认Pawn类(Default Pawn Class) 下,单击下拉菜单并选择 Ue4ASP_Character

编译(Compile) 并 保存(Save),然后关闭蓝图。

3、在 内容浏览器(Content Browser) 中,打开 Content/AnimStarterPack 文件夹。右键单击 Fire_Shotgun_Ironsights 动画,选择 创建(Create),然后选择 创建动画蒙太奇(Create AnimMontage)

4、打开该新动画蒙太奇。

在按名称调用插槽时,我们可以使用这个 插槽(Slot) 进行混合。我们可以通过动画插槽管理器对插槽进行操作。

单击 添加插槽(Add Slot) 按钮,然后将插槽命名为 上身(UpperBody),然后单击 保存(Save)。

点击 蒙太奇组(Montage Group) 区域内的下拉菜单,将其更改为 DefaultGroup.UpperBody,然后关闭窗口。

现在我们已经将该蒙太奇与 DefaultGroup.UpperBody 关联起来,允许在调用插槽时播放。

注意编译延迟。

二、更新角色蓝图

在这个步骤中,我们在角色蓝图中创建一些脚本,允许我们向动画蓝图发送信号以表明我们正在发射武器。

1、在 内容浏览器(Content Browser) 的 Content/AnimStarterPack 下,打开 Ue4ASP_Character 蓝图。找到 蹲伏(Crouching) 一节,并删除 InputAction Crouch 事件(带有Warning!符号)。

该节点上有一个警告,因为我们的项目没有被设置为使用InputAction事件"蹲伏(Crouching)"。

2、右键单击 图表并添加一个 C 按键事件并连接,如下所示。

我们刚刚将蹲伏与按 C 键相关联,您可以将该输入更改为您想要的任何键。

3、在 我的蓝图(MyBlueprint) 窗口中,单击 添加变量(Add Variable) 按钮以创建一个 布尔 变量并称其为 Fire Button Down

4、在图表中 单击右键 并添加 Left Mouse Button(鼠标左键) 按键事件。按住 Alt,拖动图表中的 Fire Button Down 变量以创建 Set 节点。重复上一个步骤(或复制 Set 节点)并连接,如下所示。

确保 按下(Pressed) Left Mouse Button(鼠标左键) 时,Fire Button Down 为 True释放(Released) 时为 False

5、编译(Compile) 并 保存(Save),然后关闭蓝图

当我们蹲伏或发射武器时,我们的角色现在可以向我们的动画蓝图发送信号。下一步,我们将在动画蓝图中设置动画图表,处理动画蒙太奇与普通移动动画的混合,这样我们就可以混合这两者。

三、设置动画图表

在这一步中,我们设置动画图表来处理动画蒙太奇和状态机中的移动姿势的混合

1、在 Content(内容)/AnimStarterPack(动画初学者包) 中,打开 UE4ASP_HeroTPP_AnimBlueprint 动画蓝图。在 我的蓝图(MyBlueprint) 窗口中,打开 动画图表(AnimGraph)

2、拖出 Locomotion 状态机,搜索和添加 新保存的缓存姿势(New Save cached pose)

在这里,我们从Locomotion状态机获取结果姿势,并将其存储在缓存姿势中,以便在其他地方使用。通过在节点上按 F2 为缓存姿势指定一个名称,例如 LocomotionCache

3、在图表中 右键单击 并添加 使用缓存姿势"LocomotionCache"(Use cached pose 'LocomotionCache')(或是您给缓存姿势取的名称)。

4、拖出 Use cached pose 节点,搜索并添加 Layered blend per bone 节点。

Layered Blend Per Bone 节点将允许我们将骨架上的指定骨骼的动画混合在一起。

5、复制/粘贴 Use cached pose 'LocomotionCache' 节点,然后拖出它,并添加 Slot 'DefaultSlot' 节点。

 在 Slot 节点的 设置(Settings) 中,单击下拉菜单并选择 DefaultGroup.UpperBody

当使用此插槽的动画蒙太奇被调用以播放时,它现在将在动画图表中被调用。

6、将 Slot 节点连接到 Layered blend per bone 节点上的 Blend Poses 0 引脚,然后将输出连接到 Result 和 Compile

我们的动画图表已经完成了,但是我们仍然需要修改 Layered blend per bone 节点上的一些设置,以便完成我们接下来要做的事情。

四、完成混合设置

在最后一个步骤中,我们定义了对混合动画进行分层的方法,以及从哪块骨骼开始混合。

1、在 UE4ASP_HeroTPP_AnimBlueprint 的 动画图表(AnimGraph) 中,单击 Layered blend per bone 节点,然后展开 图层设置(Layer Setup) 部分并单击 + 号。

2、在 骨骼名称(Bone Name) 下,输入 spine_01,然后将 混合深度(Blend Depth) 设置为 1,并选中 网格体空间旋转混合(Mesh Space Rotation Blend)

利用这些设置,我们可以将拍摄动画蒙太奇混合到我们的骨架上,从 spine_01 骨骼开始。

3、在 我的蓝图(MyBlueprint) 窗口中,打开 事件图表(EventGraph)。拖出 Cast To Ue4ASP_Character 节点的 As Ue4ASP Character 引脚,并添加 Get Fire Button Down 节点。

这将告诉我们玩家是否按下了发射按钮。

4、按住 B 并在图表中 左键单击,以创建一个 Branch 节点,并在连接 Set Crouching 后连接该节点。

对于 条件(Condition),插入 FireButtonDown 引脚。

5、在图表中 右键单击,并添加 Montage Is Playing 节点,然后分配 Fire_Shotgun_Ironsights_Montage

6、在 Montage Is Playing 节点的 Return Value,添加一个 Branch 节点。将步骤5中的 Branch 节点连接到新的 Branch 节点,如下所示,并添加一个 Montage Play 节点,其中 Montage to Play 设置为您的蒙太奇。

这将检查蒙太奇是否正在播放,如果是,不要播放(如果不是,播放蒙太奇)。

7、编译(Compile) 并 保存(Save),关闭 蓝图(Blueprint) 并删除关卡中现有的 第三人称角色(ThirdPersonCharacter)。这将允许我们使用在游戏模式中定义的所选角色,而不是关卡中的角色。

8、在编辑器中 运行(Play)

9、选择角色 CapsuleComponent组件,然后在 详情(Details) 面板中选中 在游戏中隐藏(Hidden in Game) 。

这将关闭胶囊体碰撞的调试显示。

您将看到,当您按下 鼠标左键(Left Mouse Button) 时,角色将播放射击动画蒙太奇。您可以边走边射击,甚至可以蹲下来(按住 C)并射击。您可以使用该相同指南来播放近战攻击、重装弹药动画或任何您想要在移动时做到的其他动画。

我们在动画蒙太奇中创建和分配的 上身(UpperBody) 插槽也可以在其他动画蒙太奇中分配。由于我们的动画图表已经分配了Slot节点,每当我们调用并播放一个已分配该插槽的动画蒙太奇时,它就会按照我们定义的设置来播放。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源免费的多功能PDF工具箱

它支持修改PDF、编辑PDF书签、导出PDF书签、导入书签、生成、合并、拆分、提取页面内容、提取图片、OCR 功能介绍: 修改PDF信息:修改文档属性、页码编号、页面链接、页面尺寸;删除自动打开网页等动作,去除复制及打印限制;设置阅读…

SpringBoot中这样用ObjectMapper,才够优雅!

目录 背景步骤在SpringBoot项目中要实现对象与Json字符串的互转,每次都需要像如下一样new 一个ObjectMapper对象:这样的代码到处可见,有问题吗?我们要使用jmh测试几种方式的区别:所以在我们真正使用的时候不要在方法中…

tesseract-ocr一站式安装与使用

目录 前言 安装tesseract-ocr 添加环境变量 1、在path中添加 2、在系統變量中添加 3、验证是否添加成功 添加语言包 更多语言包下载 示例程序 前言 如果你遇到了:make sure the TESSDATA_PREFIX Failed loading language \‘chi_sim 那么就是语言包缺少这个&#xf…

【简单讲解下Fine-tuning BERT】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

XAMPP本地开发环境软件的最佳替代品

在开发新网站或应用时,选择合适的本地开发环境是至关重要的。本地开发环境让您可以在自己的电脑上搭建和测试网站或应用,直到它们准备好被迁移到线上服务器。一些工具甚至提供了推送到生产环境的功能,以及设置多个本地站点的能力。 XAMPP是一…

34-5 CSRF漏洞 - CSRF分类

环境准备:构建完善的安全渗透测试环境:推荐工具、资源和下载链接_渗透测试靶机下载-CSDN博客 1)GET 类型 传参: 参数连接在URL后面 POC构造及执行流程: 构造URL,诱导受害者访问点击利用利用标签进行攻击: 构造虚假URL,在链接上添加payload抓包获取数据包,通过CSRF POC…

ping命令返回无法访问目标主机和请求超时浅析

在日常经常用ping命令测试网络是否通信正常,使用ping命令时也经常会遇到这两种情况,那么表示网络出现了问题。 1、请求超时的原因 可以看到“请求超时”没有收到任何回复。要知道,IP数据报是有生存时间的,当其生存时间为零时就会…

K8s学习七(服务发现_2)

Ingress Service 主要用于集群内部的通信和负载均衡,而 Ingress 则是用于将服务暴露到集群外部,并提供灵活的 HTTP 路由规则。在实际应用中,它们通常结合使用,Service 提供内部通信和负载均衡,Ingress 提供外部访问和…

植物糖基转移酶数据库-23年-地表最强系列-文献精读-6

pUGTdb: A comprehensive database of plant UDP-dependent glycosyltransferases pUGTdb:植物UDP依赖糖基转移酶的全面数据库 一篇关于植物糖基转移数据库的综述,地表最强,总结的最全面的版本之一,各位看官有推荐请留言评论区~…

自定义复选款与单选框,input

注&#xff1a;字体文字取自bootstrap字体库https://icons.bootcss.com/icons <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.checkbox-com,.radio-com {position: relative;display: inlin…

javaWeb物流信息网的设计与实现

摘要 本文讲述了基于JSP物流信息网的设计与实现。该系统使用java语言开发&#xff0c;使系统具有更好的平台性和可扩展性。 该系统实现了用户登录、注册、查询快递信息、快递公司注册成为合作伙伴以及系统管理员对信息进行管理等功能。系统的主要界面会将所有的服务排列好&…

get请求搜索功能爬虫

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.2</version> </dependency>…

STM32一个地址未对齐引起的 HardFault 异常

1. 概述 客户在使用 STM32G070 的时候&#xff0c;KEIL MDK 为编译工具&#xff0c;当编译优化选项设置为Level0 的时候&#xff0c;程序会出现 Hard Fault 异常&#xff0c;而当编译优化选项设置为 Level1 的时候&#xff0c;则程序运行正常。表面上看&#xff0c;这似乎是 K…

Python计算多个表格中多列数据的平均值与标准差并导出为新的Excel文件

本文介绍基于Python语言&#xff0c;对一个或多个表格文件中多列数据分别计算平均值与标准差&#xff0c;随后将多列数据对应的这2个数据结果导出为新的表格文件的方法。 首先&#xff0c;来看一下本文的需求。现有2个.csv格式的表格文件&#xff0c;其每1列表示1个变量&#x…

Java Number类

一般情况下我们会使用数据的基本数据类型&#xff1a;byte、int、short、long、double、float、boolean、char&#xff1b; 对应的包装类型也有八种&#xff1a;Byte、Integer、Short、Long、Double、Float、Character、Boolean; 包装类型都是用 final 声明了&#xff0c;不可…

2024-04-07 作业

作业要求&#xff1a; 1> 思维导图 2> 自由发挥应用场景实现一个登录窗口界面。 【可以是QQ登录界面、也可以是自己发挥的登录界面】 要求&#xff1a;尽量每行代码都有注释 作业1&#xff1a; 作业2&#xff1a; 运行代码&#xff1a; #include "myqwidget.h&quo…

橘子学JDK之JMH-01(入门)

一、前言 清明节在家的时候&#xff0c;有个老弟在一个群里看到一段代码。 package com.cache.mycache;import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.results.format.ResultFormatType; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.run…

STM32的位操作(相当于51单片机的sbit)

经过一段时间的学习&#xff0c;今天发现STM32的单个端口都有一个32位的地址&#xff0c;这样就可以把这个地址给找出来&#xff0c;进行单个位的操作了&#xff0c;这也没有什么好说的&#xff0c;直接复制粘贴就好了&#xff0c;用到的时候过来复制直接使用就行了。虽然看着挺…

深入理解指针2:数组名理解、一维数组传参本质、二级指针、指针数组和数组指针、函数中指针变量

目录 1、数组名理解 2、一维数组传参本质 3、二级指针 4、指针数组和数组指针 5、函数指针变量 1、数组名理解 首先来看一段代码&#xff1a; int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n", sizeof(arr));return 0; } 输出的结果是&…

Astra深度相机在Ubuntu18.04系统下实现相机标定

问题&#xff1a; 当使用Astra相机的启动的指令启动相机后&#xff0c;使用rviz查看相机所发布的rgb数据时&#xff0c;在终端会出现如下的提示信息&#xff1a; Camera calibration file /home/car/.ros/camera_info/rgb_Astra_Orbbec.yaml not found. Camera calibration fil…