哈喽大家好,我叫人宅。最近UE5昨天推出了新的动作匹配,并且放出了免费的资产,非常兴奋和开心,正好要用到这个技术。申明一下,文章主要内容并非是我写的,只是对官方文档做了翻译和补充,并且加入了一些我自己的理解,目前官方还没有中文版本,对于不熟悉英文阅读的朋友可能很难受,所以我这边翻译了一个中文版本,如果喜欢看英文版本的可以直接看下面链接。
那我们就正式开始:
Game Animation Sample Project
游戏动画示例项目是一个可以用来观察和了解虚幻引擎中的现代高保真动画系统的项目。该系统使用由动画功能(如运动匹配)驱动的一套运动捕捉动画,为人类角色的遍历系统提供高质量和响应性的动画系统。该系统可满足常见的动画需求,如移动、缩放壁架和跳跃。该项目分为几个障碍课程,您可以作为几个包含的角色进行导航。
动画示例项目也是可扩展的,允许您导入自己的角色以查看动画系统如何与不同角色一起工作,甚至可以将动画资源和系统移植到gfgg自己的项目中以供使用和构建。
游戏动画示例项目旨在随着引擎和功能开发的继续而构建,因此建议您继续关注即将发布的版本的更新。
Installing the Project
要安装该项目,请从虚幻引擎市场下载游戏动画示例项目。
若要打开项目,请在虚幻引擎启动器的库面板的Vault部分中找到该项目,然后选择“创建项目”按钮。
创建并打开项目后,可以使用“播放编辑器”(PIE)控件来运行项目。
Read Me
通过点击DefualLevel中的Read-Me按钮,您可以查看项目的介绍对话框。
在这里你可以阅读read-Me文件的文字记录。
Read Me |
---|
该项目的目标是展示一套全面的各种游戏动画功能和资产,供用户使用、解构和学习。目前,重点主要放在动画功能上,而不是游戏系统上,所以你在这个项目中找到的任何游戏功能(如遍历系统)都很简单,只是作为动画系统如何与游戏系统交互的一个例子。第一个版本以我们新的运动匹配工具集为中心,展示了如何设置基本的第三人称角色运动,以及将运动匹配与胶囊驱动的运动模型结合使用的最佳实践。我们还演示了如何使用运动匹配来选择蒙太奇和游戏动作的入口帧。我们也在很大程度上依赖Choosers,这是一个最近添加的功能,通过根据游戏上下文筛选可以选择的数据库,帮助我们控制运动匹配。该项目将随着每个主要引擎的发布而不断更新和改进。把它想象成一个活的项目,随着时间的推移,它将随着更多的动画、更多的功能和对多种游戏类型探索的更多想法而发展。这只是一个开始,所以请继续关注,我们希望您能在探索这个项目所提供的许多东西时获得乐趣! |
Player Controls
通过点击DefaultLevel中的View Controls按钮,您可以参考玩家控件的列表。
在这里,您可以参考键盘和鼠标以及游戏板输入的播放器控件列表
Keyboard | Controller | Action |
---|---|---|
W, A, S, and D | Left Analog Stick | 移动玩家角色。 |
Mouse (X and Y) | Right Analog Stick | 旋转摄影机。 |
Left CTRL | Right Shoulder Button | 切换玩家的跑步和步行状态。 |
Space | Bottom Face Button | 使角色在障碍物路线中跳跃并导航壁架和拱顶。 |
Middle Mouse Button | Right Analog Stick Button | 在自由旋转和扫射之间切换角色旋转模式。 |
Right Mouse Button | Left Trigger | 聚焦相机,类似于动作游戏中的瞄准功能。 |
Number Keys | 当使用CPB_Sandbox_MetaHuman_Bodys玩家角色时,可以使用1-9键将MetaHuman网格与不同的MetaHuman身体类型交换。也可以使用0键将网格切换为阳性或阴性类型。 |
Game Animation Widget
游戏动画控件是一个有用的工具和属性面板,您可以使用这些工具和属性与动画示例项目对接。通过在PIE期间控制视口中的角色并在DefaultLevel中踩下“游戏动画小部件”按钮,可以打开“游戏动画”小部件。
打开游戏动画小工具后,您可以访问以下属性和设置:
Property | Description |
---|---|
Helpful Buttons (PIE Only) | 以下选项用于在编辑器(PIE)中玩游戏时更改项目的属性。 |
Max FPS | 在这里,您可以设置项目将被渲染的最大帧数。也可以使用“显示FPS”按钮在PIE期间切换视口中的帧数。通过选择其中一个FPS选项,游戏将渲染帧速率限制在特定值,以便您可以观察动画在不同项目帧速率下的表现。此外,您还可以使用右侧的特性字段设置自定义帧速率。 |
Timescale | 在这里,您可以设置项目的时间刻度,默认选项1将以预期的速度运行项目。选择较小的选项会减慢项目速度,使观察动画变得更容易,而选择较大的值会提高项目的速度,以便您可以观察动画系统在更快的游戏过程中的表现。 |
Sound | 在这里,您可以使用右侧的属性字段设置项目声音的音量,或者使用“静音”按钮完全静音音频。 |
Still Cam | 在这里,您可以在PIE期间启用简单的调试相机模式。您可以切换以下按钮以获得不同的效果:启用:启用后,相机的位置将锁定到位。您可以将此模式与其他两个属性一起用于调试目的。禁用此属性将使相机恢复到默认透视图。跟随:当“静止摄影机”也处于“启用”状态时,允许静止摄影机跟随玩家角色(但不随控制器旋转)。旋转:当“静止摄影机”也处于启用状态时,允许“静态摄影机”旋转以跟踪玩家的位置。 |
Draw | 在这里,您可以在以下玩家角色组件的视口中切换调试图形:碰撞:玩家角色的碰撞边界。骨骼:玩家角色的骨骼资源。移动:玩家角色的移动模型。轨迹:玩家角色的运动轨迹组件,由运动匹配系统查询。运动匹配(MM)查询:运动匹配系统正在查询玩家角色的轨迹组合中的时刻。 |
Anim Nodes | 在以下属性集中,可以将不同的附加组件切换到基础运动匹配系统,以观察这些附加功能中的每一个如何增强动画系统的质量和覆盖率。每个功能都包含一个启用或禁用该功能的按钮,以及一个调试渲染,以更好地观察该功能如何更改运行时使用的最终姿势。 |
Root Offset | 在这里,您可以切换ABP_SandboxCharacter动画蓝图中的实验性“偏移根骨骼”节点。该节点用于修复动画播放过程中与胶囊的网格偏差。启用节点后,当角色停止移动时,系统会将网格的位置混合回胶囊中心。您可以切换此属性以测试其效果,并启用“调试”绘图以在游戏过程中观察网格与胶囊的偏差。 |
Orientation Warping | Orientation Warping 是一种动画功能,用于扭曲角色移动以满足特定目标和对齐。方向扭曲可以帮助实现项目所需的动画覆盖率,以填补没有动画数据的空白。可以使用此特性切换“方向扭曲”节点是否处于活动状态,以便比较其效果。还可以启用“调试”选项,以便在运行时对角色的“方向扭曲”影响进行可视化渲染。有关方向扭曲的详细信息,请参见方向扭曲文档。 |
Leg IK | 反向运动学(IK)是创建骨骼链的方法,这些骨骼链可以更自然地对角色的环境做出反应。腿部IK系统会在角色站在不平坦的曲面上时创建更自然的姿势。可以使用此属性切换ABP_SandboxCharacter动画蓝图中的腿部IK节点在运行时是否处于活动状态。当特性为“启用”时,也可以使用“调试”选项查看腿部IK节点的效果。 |
Motion Matching Database LOD | 在这里,您可以设置姿势搜索数据库资源的详细等级(LOD),运动匹配系统将从中进行动画选择。使用“运动匹配数据库LOD”特性,可以观察使用具有更密集或更稀疏动画数据的“姿势搜索数据库”时动画数据的缩放方式。 |
Character Override | 在这里,您可以覆盖玩家角色的蓝图,以观察不同角色在相同动画数据集和逻辑下的表现。选择不同的角色将覆盖项目的游戏模式典当类。 |
Controller | 在这里,您可以观察在运行时为游戏提供的输入的调试渲染。当您向游戏输入时,控制器会更新为高亮显示的表示输入的按钮。 |
- 启用:启用后,相机的位置将锁定到位。您可以将此模式与其他两个属性一起用于调试目的。禁用此属性将使相机恢复到默认透视图。
- 跟随:当“静止摄影机”也处于“启用”状态时,允许静止摄影机跟随玩家角色(但不随控制器旋转)。
- 旋转:当“静止摄影机”也处于启用状态时,允许“静态摄影机”旋转以跟踪玩家的位置。
DrawHere可以在以下玩家角色组件的视口中切换调试图形:
- 碰撞:玩家角色的碰撞边界。
- 骨骼:玩家角色的骨骼资源。
- 移动:玩家角色的移动模型。
- 轨迹:玩家角色的运动轨迹组件,由运动匹配系统查询。
- 运动匹配(MM)查询:运动匹配系统正在查询玩家角色的轨迹组合中的时刻。
动画节点在以下一组属性中,可以将不同的附加组件切换到基本运动匹配系统,以观察这些附加功能中的每一个如何增强动画系统的质量和覆盖范围。每个功能都包含一个启用或禁用该功能的按钮,以及一个调试渲染,以更好地观察该功能如何更改运行时使用的最终姿势。根偏移在这里,您可以在ABP_SandboxCharacter动画蓝图中切换实验性的“偏移根骨骼”节点。该节点用于修复动画播放过程中与胶囊的网格偏差。启用节点后,当角色停止移动时,系统会将网格的位置混合回胶囊中心。您可以切换此属性以测试其效果,并启用“调试”绘图以在游戏过程中观察网格与胶囊的偏差。方向扭曲方向扭曲是一种动画功能,用于扭曲角色移动以满足特定目标和对齐。方向扭曲可以帮助实现项目所需的动画覆盖率,以填补没有动画数据的空白。可以使用此特性切换“方向扭曲”节点是否处于活动状态,以便比较其效果。还可以启用“调试”选项,以便在运行时对角色的“方向扭曲”影响进行可视化渲染。
有关方向扭曲的详细信息,请参见方向扭曲文档。腿IK反向运动学(IK)是创建骨骼链的方法,这些骨骼链可以更自然地对角色的环境做出反应。腿部IK系统会在角色站在不平坦的曲面上时创建更自然的姿势。可以使用此属性切换ABP_SandboxCharacter动画蓝图中的腿部IK节点在运行时是否处于活动状态。当特性为“启用”时,也可以使用“调试”选项查看腿部IK节点的效果。运动匹配数据库LOD在这里,您可以设置姿势搜索数据库资源的详细级别(LOD),运动匹配系统将从中进行动画选择。使用“运动匹配数据库LOD”特性,可以观察使用具有更密集或更稀疏动画数据的“姿势搜索数据库”时动画数据的缩放方式。角色覆盖在这里,您可以覆盖玩家角色的蓝图,以观察不同角色在相同动画数据集和逻辑下的表现。
选择不同的角色将覆盖项目的游戏模式典当类。控制器在这里,您可以观察在运行时为游戏提供的输入的调试渲染。当您向游戏输入时,控制器会更新为高亮显示的表示输入的按钮。
首次打开Read-Me、View Controls或Game Animation Widget后,您可以通过在菜单栏中导航到Tools>Editor Utility Widgets并选择要打开的窗口来重新打开这些窗口。
Playing the Project
该项目包含一个级别(DefaultLevel),该级别包含一系列障碍物,这些障碍物可以通过跳马、攀爬和从中跌落进行交互。DefaultLevel将在第一次打开项目时打开。要开始与项目交互以观察动画系统的工作情况,请使用虚幻编辑器工具栏PIE部分的“播放”按钮。
该项目包含几个原型风格的墙、壁架和平台,您可以使用键盘和鼠标或游戏板输入进行导航。
尝试与每个障碍物的不同大小进行交互,以查看缩放以适应任何交互的动态动画播放。
水平仪内有几个按钮,位于地面上。这些按钮有不同的效果,可以通过与角色一起踩来激活。
Level Color Scheme
第一组在玩家出身点附近。这三个按钮将改变关卡的外观。
Project Information and Settings
下一组按钮将打开项目信息和属性设置。
还有一系列“到达目的地”按钮,可以将玩家传送到障碍球场的特定区域。
Importing Your Own Character
可以将“动画示例项目”用作起点,以便在自己的项目中构建类似的系统。您可以在“动画样例”项目中导入自己的角色,以使用以下步骤观察系统对骨骼网格的执行情况。
Prerequisites
- 您已将骨骼网格角色导入到游戏动画样例项目中。有关导入骨骼网格角色的详细信息,请参见FBX内容管道文档。
- 您已经为导入的角色创建并设置了IK装备资源。有关创建IK装备资源的详细信息,请参见IK装备文档。
Implement Your Character
导入角色并设置IK装备资源之后。可以创建“IK装备重定目标器”资源,以将UEFN_Mannequin骨骼网格角色重定目标到骨骼网格角色。有关创建IK重定目标资源的详细信息,请参见IK装备重定目标
使用UEFN_Mannequin作为“源”,将角色作为“目标”设置IK重定目标器资源后。
找到下图的资源,并且打开:
在“我的蓝图”面板中选择IKRetargeter_Map变量,然后展开“默认值”阵列。使用(+)Add将新元素添加到阵列中,然后在新元素属性字段中,选择IK重定目标器资源。然后在阵列元素的名称字段中输入以下内容:RTG_UEFN_to_{您的资产名称}
接下来,在内容浏览器中导航到“内容”->“蓝图”,并通过右键单击资源并选择“创建子蓝图类”选项来创建CBP_Sandbox_Character Character蓝图的新子蓝图。将资源重命名为CBP_Sandbox_{您角色的名称}。然后打开其资源
在“组件”面板中选择“网格(CharacterMesh)”组件,然后在“详细信息”面板中禁用“可见”特性。
然后,在网格组件仍处于选定状态的情况下,使用(+)Add创建一个新的骨骼网格组件作为子组件。可以以角色的名字命名此子网格组件。
选择新的子网格组件,并将“详细信息”面板中的“骨骼网格资源”特性设定为角色的骨骼网格。
You may need to adjust the character’s placement in the viewport using the transform tools.
Select the new child mesh component, and set the Animation Blueprint to the ABP_SandboxCharacter using the drop-down menu.
然后导航到“元件标记”属性,并使用(+)add添加一个新的数组元素。然后使用元素字段输入以下内容:RTG_UEFN_to_{您的资产名称}
Add Your Character to the Game Animation Widget
将角色设置为在游戏动画样例项目中工作后,可以将角色蓝图的实例添加到游戏动画小控件中,以便在运行时在项目中选择和播放角色。要开始,请在内容浏览器中导航到“Content”->“tool”,然后打开“GameAnimationWidget”资源。
在Widget Editor的Designer面板中,复制并粘贴其中一个字符图标以添加新按钮。
然后在“视口”中选择新图标,并打开其“详细信息”面板。在“对象”特性中,使用下拉菜单选择角色的蓝图。
现在,当在编辑器中播放项目时,您可以访问游戏动画小部件中的此按钮。
Importing a MetaHuman
MetaHuman角色需要一些额外的步骤才能获得准确和高质量的结果。有关将自定义MetaHuman角色导入动画样例项目的详细信息,请参见以下文档:
以下是英文版本
Import a MetaHuman to the Game Animation Sample Project
How to import a MetaHuman to the Game Animation Sample project.
Exporting Animations
“动画示例”项目包含一套强大的移动和攀爬动画资源,您可以在自己的项目中使用这些资源。动画序列资源可以在以下位置找到,即Content/Characts/UEFN_Mannemakin/Animations,然后通过选择所需资源并在右键单击上下文菜单中选择“迁移”选项来导出。选择“移植”后,系统将提示您选择项目并选择保存位置。
有关在虚幻引擎项目之间迁移资产的更多信息,请参阅迁移资产文档。
也可以使用“导出”选项将“动画序列”资源保存到虚幻引擎项目之外的计算机中。
Animation Blueprint
用于驱动玩家角色动画系统的主动画蓝图可以通过在内容浏览器中导航到“内容”>“蓝图”>“ABP_SandboxCharacter”来访问。此蓝图用于驱动所有可选择的角色网格,并且可以通过双击资源打开。
AnimGraph
动画图形是在运行时控制玩家角色姿势的主要图形。此图包含“运动匹配”节点以及用于驱动角色动画的辅助动画节点。有关使用AnimGraph的详细信息,请参阅AnimGraph文档,有关调试和观察工具的详细信息请参阅动画调试文档。
Motion Matching
动画样例项目中包含的动画系统是围绕“运动匹配”构建的,该动画系统查询系统(在本例中为角色的运动模型),以从动画资源数据库中选择动画姿势,从而选择角色给定位置和动量的最佳姿势。运动匹配系统使用角色动画蓝图中的“运动匹配”节点在运行时选择姿势。
运动匹配节点使用动画节点功能来执行必要的逻辑,以便进行选择。您可以通过选择节点并使用眼镜按钮打开AnimNode函数图,该按钮位于详细信息面板中标记为Update_MotionMatching的更新函数旁边或更新时字段中的节点上。
在更新功能中,可以观察如何首先使用“求值选择器”节点来选择“运动匹配”节点将用于从中选择动画姿势的活动姿势搜索数据库资源。这是为了限制节点必须搜索的数据,以控制节点可以选择的结果,并提高系统的性能。
通过选择“求值选择器”节点,双击“选择器表”特性中指定的资源,或者在内容浏览器中导航到以下位置,可以访问“选择器表》资源Content/Characters/UEFN_Mannequin/Animations/MotionMatchingData/CHT_PoseSearchDatabases
做出选择后,节点还会运行Update_MotionMatchingPostSelection函数,将选定的姿势搜索数据库资产设置为当前数据库中的活动数据库。
通过导航到以下位置,可以访问内容浏览器中的姿势搜索数据库:
Content/Characters/UEFN_Mannequin/Animations/MotionMatchingData/Databases
该节点还使用浮点变量输入来设置将用于在上一个姿势和选定动画姿势之间转换的混合时间。
Pose History Node
姿势历史节点是第二个与运动匹配相关的动画图节点,它对运动匹配的运行至关重要。该节点包含对轨迹的引用,或者可以选择性地生成轨迹本身,这是将动画数据与其匹配所需的,以及运动匹配查询也使用的先前姿势数据的缓存。
该节点包含关于姿势收集频率、可以存储的先前姿势数量以及要从中采样的骨骼列表的设置。
有关“运动匹配”和“姿势历史”节点的详细信息,请参见以下文档:
AnimGraph Comments
在这里,您可以引用动画蓝图的AnimGraph中包含的注释的转录。
Node | Comment |
---|---|
Motion Matching Node | 运动匹配节点:这是运动匹配的主要节点。它采用姿势搜索数据库(使用姿势搜索模式),并使用姿势历史节点中的轨迹查询来根据查询选择帧。此设置具有一些值得注意的额外功能。混合时间属性绑定到一个函数,该函数允许我们根据状态和游戏条件动态更改混合时间。除此之外,我们还有2个应用于节点的“动画节点函数”。此节点更新的每一帧都会调用Update_MotionMatching,并且在运动匹配进行选择后的每一个帧都调用Update_MotionMatching_PostSelection。Update_MotionMatching正在评估一个Chooser并输出一个姿势搜索数据库数组,这些数据库被输入到节点中。这使我们能够将数据分离到多个数据库中,并使用“选择器”来筛选运动匹配能够从哪些数据库中进行选择。Update_MotionMatching_PostSelection允许我们根据运动匹配的选择执行额外的逻辑。目前,我们只缓存选定的数据库,以便从中获取标记(用于进行额外的选择),但未来我们计划允许此功能根据选定的动画更新混合时间或混合配置文件。如果双击“运动匹配节点”(Motion Matching Node),则可以打开“混合堆栈图”(Blend Stack Graph),这是应用于每个动画的内部图,我们将在其中处理“方向扭曲”(Orientation Warping)和“转向”(Steering)。 |
BlendSpace Node | 简单相加倾斜:此节点根据角色的横向加速度左右倾斜角色。这将应用于所有运动动画。一旦将弧线添加到数据库中,就需要对其进行调整,以免过度倾斜角色。 |
Simple Aim Offset | 简单目标偏移:当摄影机和角色在“Enable_AO”功能中设置的阈值内对齐时,此设置使角色看起来朝向摄影机方向。使用死区混合(一种更好的惰性化类型,支持混合曲线),以便每次混合时都可以重置目标偏移而不会弹出,从而确保混合始终平滑。否则,在偏移混合时混合到偏移中会导致混合问题。 |
Default Slot Node | 默认槽节点:该节点是将遍历蒙太奇注入图形的位置。 |
Offset Root Bone Node | 偏移根骨骼(实验!):当胶囊移动和动画数据不匹配时,此节点会动态地将偏移应用于根骨骼,以保持网格更加稳固。对于平移,在运动过程中,允许根部在固定半径内偏离胶囊,在开始和枢转过程中最为明显。停止时,偏移将“释放”(混合),以便角色在空闲时保持在胶囊中心。对于“旋转”,允许根骨骼独立于胶囊旋转,因此旋转完全由根运动控制,根运动在运动匹配节点内被操纵,以始终朝向目标对齐。这样可以更容易地执行更复杂的旋转动画,如原地转弯、转弯起点和转弯枢轴。将在未来版本中修复的已知问题:-平移偏移没有碰撞检查,因此可以剪裁到几何体中-当蒙太奇播放时,我们会释放偏移,但蒙太奇中的“释放”+运动扭曲可能会导致不希望的运动-偏移的插值方式目前是硬编码的。 |
Leg IK Node | 简单腿部IK过程:该节点将脚部固定到IK脚部骨骼位置,这些位置通常通过姿势扭曲节点进行扭曲。当在腿上使用混合轮廓时,这也可以改进混合。 |
Pose History Node | 姿势历史节点:这是运动匹配所需的第二个主要节点。该节点包含我们查询数据的轨迹(在本例中,我们从生成轨迹函数中输入轨迹)。它还包含对查询进行采样的频率设置,以及要从中进行采样的骨骼列表。 |
Animation Blueprint Event Graph
ABP_SandboxCharacter蓝图使用事件图执行逻辑,例如设置AnimGraph用于生成动画姿势输出的变量。
Animation Blueprint Functions
在这里,您可以参考玩家角色动画蓝图中包含的函数列表:
Function | Description |
---|---|
SetReferences | 此函数缓存对CBP_SandboxCharacter蓝图和Character Movement组件的引用,以便在整个动画蓝图中使用。这也使我们能够使用线程安全属性访问调用。 |
UpdateEssentialValues | 该功能缓存项目动画系统中使用的基本变量和游戏数据,如角色的变换、移动速度和方向,以及对游戏状态进行分类的标签。 |
GenerateTrajectory | 此函数生成角色的移动轨迹,这是运动匹配系统查询以匹配动画姿势选择的主要组件。 |
UpdateStates | 该功能缓存角色所处的所有重要游戏相关状态,并保存最后一帧的值,以便我们可以确定值何时更改。为了方便起见,它将它们保存到易于阅读的枚举中,这些枚举主要用于运动匹配选择器中过滤出运动匹配数据库,因此只能选择当前游戏状态中的运动。 |
IsMoving | 此函数用于通过查看角色的当前和未来速度(由轨迹生成确定)来设置移动状态枚举,以确定角色是否正在尝试移动、将来是否将要移动、是否试图停止或将来是否已停止。 |
IsStarting | 此函数用于通过检查未来速度是否大于当前速度来确定角色是否开始移动。如果当前数据库资产是数据透视数据库,则此函数会将IsStarting变量设置为false。这可以防止运动匹配系统中断枢轴,因为枢轴的后半部分与起点非常相似。 |
IsPivoting | 该函数用于通过检查角色的未来轨迹是否在与角色当前轨迹大不相同的方向上移动来确定角色是否在旋转,方法是检查方向的变化是否大于设定的阈值。旋转模式有一个不同的阈值,因为45度枢轴在扫射过程中可以很好地工作,但对于“定向移动”来说不是必需的。 |
ShouldTurnInPlace | 此功能用于通过检查根骨骼旋转是否与角色的胶囊旋转不同来确定角色是否在原地旋转。在本示例项目中,如果旋转大于50度,并且角色当前正在瞄准,则角色应旋转到位。如果角色刚刚停下来,我们也允许在游戏的地方转弯,这给了我们一种“Stick Flick”的行为。在目标状态期间的就地周转行为仍然是在制品。需要对导向或根偏移节点应用额外的限制,以防止角色落后太多。 |
JustLandedLight | 如果角色刚刚着陆,并且着陆速度小于重型着陆速度阈值,则播放轻型着陆动画。 |
JustLandedHeavy | 如果角色刚刚着陆,并且着陆速度大于重型着陆速度阈值,则播放重型着陆动画。 |
JustTraversed | 此函数用于在混合返回移动时选择遍历动画的尾部。例如,如果MovingTraversal动画曲线值大于1,并且默认槽未激活(混合时槽未激活),则角色必须从移动遍历动作中混合出来,因此此函数将返回true,从而允许运动匹配系统为窒息混合选择遍历动画的结束。 |
ShouldSpinTransition | 如果根骨骼旋转和角色的胶囊旋转非常不同,则此功能将允许播放旋转过渡动画。旋转过渡是在固定世界方向上移动时旋转角色的移动动画,在切换旋转模式时非常有用。例如,如果角色使用“定向到移动”模式向摄影机奔跑,然后切换到扫射,这将要求角色快速旋转180度。旋转过渡动画将是这个游戏场景的理想过渡。目前,我们正在使用重新制作开始来代替旋转过渡。 |
Get_OffsetRootRotationMode | 此功能用于确定“偏移根部旋转”模式。该模式是使用两个枚举来控制的,这两个枚举是根据我们当前是否在默认插槽中播放蒙太奇来设置的。如果在默认槽中设置了蒙太奇,我们不希望保持任何旋转偏移。Release Enum基本上混合了任何偏移,之后它将被锁定到胶囊旋转,就像没有根偏移节点一样。累积枚举意味着根将反向旋转对胶囊旋转的任何更改,使其看起来独立于胶囊旋转,这允许根运动和转向完全控制其旋转。 |
Get_OffsetRootTranslationMode | 此函数用于确定偏移根平移模式。该模式由三个枚举控制,这三个枚举是基于几个字符状态设置的。如果我们目前正在默认的老虎机中播放蒙太奇,如果我们在空中,或者如果我们没有移动,我们不想保持任何平移偏移。Release Enum基本上混合了任何偏移,之后它将被锁定到胶囊位置,就像没有根偏移节点一样。插值枚举意味着根可以根据根的运动稍微偏离胶囊的位置,但始终尝试朝着中心进行插值。当动画数据和胶囊移动不完全匹配时,例如在开始、枢轴和其他复杂移动过程中,这很有帮助。 |
Get_OffsetRootTranslationHalfLife | 此函数控制“根偏移”节点对根骨骼的平移进行插值的速度。当停止时,我们希望非常快速地进行插值,这样停止总是在胶囊的中心结束,但当移动时,我们允许稍微更平滑的插值。 |
Enable_AO | 如果角色处于扫射模式,并且当前与摄像机在设定的阈值内对齐,则此功能启用瞄准偏移,但在默认时段播放蒙太奇时不启用。 |
Get_AOValue | 此函数用于计算角色根骨骼与摄影机控制旋转之间的旋转差。差值将输出到目标偏移混合空间。 |
CalculateRelativeAccelerationAmount | 此函数用于计算角色的“相对加速度量”。该值表示相对于演员旋转的当前加速度或减速度。它被规格化为-1到1的范围,因此-1等于角色移动组件的“最大制动减速度”,1等于“最大加速度”。 |
GetLeanAmount | 此函数使用角色的“相对加速度量”(通过CalculateRelativeAccleractionAmount函数计算),并按当前速度缩放其值,以确定角色应在添加贫混合空间的情况下倾斜多远。 |
Update_MotionMatching | 每当更新“运动匹配”节点时,都会调用此动画节点函数。它评估一个Chooser资产,该资产基于当前游戏上下文返回一组姿势搜索数据库资产。这使我们能够执行更高级别的过滤,使我们能够更好地控制运动匹配系统能够从哪些动画中进行选择。例如,我们只在角色行走时(通过玩家的输入控制)从行走数据库中进行搜索,从而防止运动匹配在角色试图行走时选择跑步。 |
Update_MotionMatching_PostSelection | 此函数在“运动匹配”节点选择了动画后调用。在这种情况下,我们缓存所选动画所在的数据库,以便获取EventGraph中的标记(由于线程安全问题)。有关系统如何缓存此数据的更多信息,请参阅CurrentDatabaseTags函数。未来,我们计划使用此功能来控制其他内容,如基于选定动画的混合时间和混合配置文件。 |
Get_MMBlendTime | 此函数用于根据当前和以前的状态更改“运动匹配”节点的混合时间。未来,我们计划允许从所选数据库中更直接地设置混合时间。 |
Get_MMInterruptMode | 此功能控制“运动匹配”节点的“中断模式”,方法是确定如果可选择的数据库发生了更改,运动匹配是否会强制混合到新数据库中,或者是否会等到找到比当前播放的动画成本更低的匹配。默认情况下,我们不会中断,但是,每当核心状态发生变化时,我们知道我们想开始播放新的动画,因此系统是为了强制中断而构建的。这样可以防止“运动匹配”系统在角色开始移动时停留在空闲动画播放中,或者在角色想要停止时停留在循环动画中,这可能基于“持续姿势偏移”调整而发生。从本质上讲,这使运动匹配能够对核心状态的变化做出响应。 |
Enable Steering | 此功能通过检查角色是在移动还是在空中来确定是否可以操纵角色。这样可以防止空闲动画被操纵,这可能会导致滑动。 |
GetDesiredFacing | 此函数用于计算操纵混合空间节点旋转的目标。该目标是使用来自预测轨迹的面向未来的方向来计算的。这允许转向节点朝着未来的方向旋转,而不是总是朝着当前演员的旋转方向旋转,这可能会导致它落后太多。 |
Character Blueprint
角色蓝图是控制玩家角色其余逻辑和功能的主要蓝图。
角色蓝图包含控制角色移动和游戏操作的逻辑,以及将有关角色所处游戏状态的有价值数据(如角色何时跳跃、着陆或执行遍历操作)传递到动画蓝图以进行姿势搜索数据库选择。