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节点,每当我们调用并播放一个已分配该插槽的动画蒙太奇时,它就会按照我们定义的设置来播放。

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

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

相关文章

Java数组详解

​TOC 第一章、数组的概念介绍 1.1)数组的概念 ①数组就是用来储存数据的容器,可以存储同一种类型的数据,是同一种数据类型的集合。实现对这些数据的统一管理。如果数组中存储的是基本类型数据,我就不能往里面存引用类型数据。数组中存储的…

CLIPSeg如果报“目标计算机积极拒绝,无法连接。”怎么办?

CLIPSeg这个插件在使用的时候,偶尔会遇到以下报错: Error occurred when executing CLIPSeg: (MaxRetryError("HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /CIDAS/clipseg-rd64-refined/resolve/main/toke…

14届蓝桥杯 C/C++ B组 T5 接龙排序 (最长上升子序列DP+优化)

不难发现这是一个LIS问题&#xff0c;但是如果直接套用LIS的模版&#xff0c;在数据范围到达 1 e 5 1e5 1e5 的情况下&#xff0c;就只能够得到一半的分数&#xff0c;所以我们需要对其进行优化。 首先给出暴力的代码&#xff1a; #include<iostream> using namespace…

知识管理系统|基于Springboot和vue的知识管理系统设计与实现(源码+数据库+文档)

知识管理 目录 基于Springboot和vue的知识管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 5.2.2 文章信息 5.3.1 论坛交流 2、后台 用户管理 5.1.2 文章分类 5.2.1 资料分类 四、数据库设计 五、核心代码 六、论文参考 七、最…

2024年上半年WSK-PETS5报名及考试时间公布

4月1日&#xff0c;中国教育考试网发布了2024年上半年全国外语水平考试WSK&#xff08;PETS5&#xff09;的报名及考试通知&#xff0c;为方便关注者&#xff0c;知识人网小编特做全文转载。 国家公派留学人员全国外语水平考试&#xff08;WSK-PETS5&#xff09;成绩作为国家留…

Python零基础从小白打怪升级中~~~~~~~流程控制语句

第三节&#xff1a;Python的流程控制语法 一、Python条件语句的语法 if 条件1:条件1成立执⾏的代码一条件1成⽴执⾏的代码二...... elif 条件2&#xff1a;条件2成立执⾏的代码三条件2成立执⾏的代码四...... ...... else:以上条件都不成⽴&#xff0c;执行的代码五以上条件都…

axios是什么?axios使用axios和ajax

Axios 是一个基于 Promise 的 HTTP 客户端&#xff0c;用于浏览器和 Node.js 环境。它是由 GitHub 用户 mzabriskie 开发的&#xff0c;并且得到了广泛的社区支持。Axios 的设计目标是提供一种简洁、易用且功能强大的 HTTP 请求方式&#xff0c;以替代传统的 Ajax&#xff08;A…

【深入理解Java IO流0x03】解读Java最基本的IO流之字节流InputStream、OutputStream

在开始前&#xff0c;我们再来回顾一下这张图&#xff1a; 本篇博客主要为大家讲解字节流。 我们都知道&#xff0c;一切文件&#xff08;文本、视频、图片&#xff09;的数据都是以二进制的形式存储的&#xff0c;传输时也是。所以&#xff0c;字节流可以传输任意类型的文件数…

2.动态库与静态库

1.库的制作 库文件是计算机上的一类文件&#xff0c;可以将库文件看做是一种代码仓库。它提供给使用者一些可以直接拿来用的变量&#xff0c;函数或类。库是一种特殊的程序&#xff0c;但是库是不能单独运行的。 库文件有两种&#xff1a;静态库和动态库 静态库: GCC进行链接…

Jackson 各种注解使用示例

参考资料 Jackson使い方メモ 目录 一. JsonIgnore二. JsonIgnoreProperties三. JsonProperty3.1 作用于entity属性上&#xff0c;指定json对象属性名3.2 作用于entity方法上&#xff0c;指定json对象属性名 四. JsonFormat4.1 日期格式化4.2 数字格式化4.3 枚举类返回code 五.…

Open CASCADE学习|平面上的PCurve

曲面上的曲线PCurve&#xff0c;字面上理解即为参数曲线(Parametric Curve)。在几何建模中&#xff0c;PCurve通常被描述为附加在参数曲面之间公共边上的数据结构。从更具体的定义来看&#xff0c;当给定一个曲面方程&#xff0c;并且其参数u和v是另一个参数t的函数时&#xff…

Redis数据库的简介、部署及常用命令

关系数据库与非关系型数据 关系型数据库 关系型数据库是一个结构化的数据库&#xff0c;创建在关系模型&#xff08;二维表格模型&#xff09;基础上&#xff0c;一般面向于记录。sQL语句&#xff08;标准数据查询语言&#xff09;就是一种基于关系型数据库的语言&#xff0c…

HarmonyOS NEXT应用开发之Environment:设备环境查询

开发者如果需要应用程序运行的设备的环境参数&#xff0c;以此来作出不同的场景判断&#xff0c;比如多语言&#xff0c;暗黑模式等&#xff0c;需要用到Environment设备环境查询。 Environment是ArkUI框架在应用程序启动时创建的单例对象。它为AppStorage提供了一系列描述应用…

wireshark抓包新手使用教程

Wireshark是非常流行的网络封包分析软件&#xff0c;可以截取各种网络数据包&#xff0c;并显示数据包详细信息。常用于开发测试过程各种问题定位。本文主要内容包括&#xff1a; 1、Wireshark软件下载和安装以及Wireshark主界面介绍。 2、WireShark简单抓包示例。通过该例子学…

20万就想买智能驾驶汽车?!我给你找到了三款车

文 | AUTO芯球 作者 | 雷歌 我都不敢相信&#xff0c;智能驾驶的车型已经这么便宜啦&#xff01; 一年多前&#xff0c;我一个前同事大冤种&#xff0c;还另掏3万多买某个造车新势力品牌的智驾包呢。 现在动不动就全给你标配了。 近的就说刚刚发布的小米SU7标准版&#xf…

962: 括号匹配问题

【学习版】 【C语言】 【C】 #include<iostream>class MyStack { public:struct Node {char val;Node* prev;Node* next;Node(char x) :val(x), prev(NULL),next(NULL) {};};MyStack() {base new Node(0);top base;}bool empty() {return top base;}void push(int …

Mysql底层原理五:如何设计、用好索引

1.索引的代价 空间上的代价 时间上的代价 每次对表中的数据进⾏增、删、改操作时&#xff0c;都需要去修改各个B树索引。⽽且我们讲过&#xff0c;B树每层节点都是按照索引列的值从⼩到⼤的顺序排序⽽组成了双 向链表。不论是叶⼦节点中的记录&#xff0c;还是内节点中的记录&a…

vue 中使 date/time/datetime 类型的 input 支持 placeholder 方法

一般在开发时&#xff0c;设置了 date/time/datetime 等类型的 input 属性 placeholder 提示文本时&#xff0c; 发现实际展示中却并不生效&#xff0c;如图&#xff1a; 处理后效果如图&#xff1a; 处理逻辑 判断表单项未设置值时&#xff0c;则设置其伪类样式&#xff0c;文…

深度学习基础之一:机器学习

文章目录 深度学习基本概念(Basic concepts of deep learning)机器学习典型任务机器学习分类 模型训练的基本概念基本名词机器学习任务流程模型训练详细流程正、反向传播学习率Batch size激活函数激活函数 sigmoid 损失函数MSE & M交叉熵损失 优化器优化器 — 梯度下降优化…

IVS模型解释

核心思路 【Implied volatility surface predictability: The case of commodity markets】 半参数化模型&#xff1a;利用各种参数(或者因子)对隐含波动率进行降维&#xff08;静态参数化因子模型&#xff09;&#xff0c;对参数化因子的时间序列进行间接的建模 基于非对称…