Lyra技术解析 - 插件结构
本文深入研究了Lyra中的插件,所以您就不用再遭罪了。这些插件已与相关文档一起整理编译,方便搜索。
本文内容基于Unreal Engine 5.5.4
如果我犯了错误,请在下面评论并帮助未来的读者!本文中文翻译由AI机翻,可能不够准确或产生一定的阅读困难。
这是一系列关于我从Epic的Lyra项目中学到的知识笔记。该项目声称展示了当前虚幻引擎框架下的最佳实践。其中有些内容是我之前不了解的,有些则已经知晓,但认为仍然值得记录。
所有插件及分类
Lyra启用了大量插件,这些插件可分为若干组别,涵盖从后端到前端的全流程。其核心理念在于:所有插件都在不同程度上为实际项目功能服务,因此若不结合具体项目很难单独讨论。最终这个系列将会涉及这些内容,不过得一口一口来,接下来是第一口:
这里还有其他关于插件的文章:Lyra’s Plugins、UE5 Study、Zomg’s Unreal Engine Notes 和 Standard Plugins
设置相关
来自Lyra’s Plugins: “为项目中设置界面处理添加基类。
基于CommonUI
的ActivatableWidgets
构建,因此将使用该系统作为其基础界面类。
需注意所有设置数据均在C++中声明,这意味着设计人员在没有工程师协助的情况下无法扩展。”
Editor Tools
该插件为编辑器添加新选项卡,可快速向关卡添加Actor。本质上会打开新关卡,支持在不同关卡间拖放Actors。
简易视频教程:
来自Lyra’s Plugins: “添加EUW_MaterialTool
,这是在Lyra材质编辑器中实用的编辑器控件。
同时添加BP函数Change Mesh Materials
,该函数在网格体变更时显式调用PostEditChange
。”
资产管理
用于管理异步操作(如加载)的C++工具类。
虚幻引擎中管理数据资产的高级系统。允许创建数据资产注册表,并提供运行时查询和操作方式。这是对DataTable
或CurveTable
系统的升级,更接近数据库概念。
其最大优势在于DataRegistry
以解耦方式通过统一API从任何可用资源获取数据。不再需要硬引用DataTable
或CurveTable
,只需使用DataRegistry API
即可从任意来源同步/异步获取数据,甚至支持缓存。
官方文档: Data Registry
该插件用于增强虚幻引擎的搜索功能。支持通过资产类型、名称、标签等多种条件搜索项目资源,甚至可搜索打印的常量字符串等参数。
用于阻止某些资产被其他资产引用的插件。可有效防止循环依赖或确保特定资产不在某些上下文中使用。例如DLC
数据应引用基础游戏内容,但反之则不行。
几何工具
为虚幻引擎添加了一个新编辑器模式,支持直接在编辑器中创建和操作3D模型。适用于无需离开编辑器即可创建自定义资产或修改现有资产。不过相比Blender
或Maya
等专业3D软件,该工具在控制和精度上有所欠缺,更像是原型工具而非生产工具。
社区文档: Modeling Tools Community Docs
视频:
功能类似Houdini
,可通过该插件实现程序化建模。也可用于运行时生成碰撞框或其他几何体。
渲染与图形
使用蓝图创建和渲染体积效果的工具库。
该插件提供VolumetricCloudFunctions.ush
文件
动画系统
提供动画变形功能的工具库,包含方向变形(OrientationWarping)、坡度变形(SlopeWarping)、步幅变形(StrideWarping)等。
音频系统
无需赘述的知名复杂音频系统,Epic官方提供专属 Metasound Documentation 文档
为引擎添加音频调制、控制总线(Control Bus
)和混音总线功能,在概念上类似UE4的音频Ducking系统,但控制总线方案更灵活强大,操作体验接近Wwise
等专业DAW
。
入门推荐 Audio Modulation Quick Start
详细功能请参阅 Audio Modulation Documentation
通过体积控件自动管理混响等音频特性的小型插件,替代传统蓝图/代码手动配置方案,已内置混响(Reverb
)、子混音(Submix
)、衰减(Attenuation
)等功能。这个功能的设计思想是,原本如果我们需要给音源加一个混响,我们可能会直接静态加在音源上,或者动态推给Submix,或者通过RTPC在Metasound中动态控制。现在我们可以把他绑在一个体积盒中,这样我们就可以创造类似“所有在这个体积中的音源可以获得一个混响效果,所有不在这个体积重的音源可以获得一个低通滤波,之类的”
类似Gameplay Ability
但是是为了Audio而生的音频响应系统,使音频组件能根据游戏事件(如进入区域、交互行为、生命值变化等)触发特定音频逻辑。
音频工具库,提供GetQFromBandwidth
(通过带宽获取Q值)、ConvertDecibelsToLinear
(分贝转线性值)、GetFrequencyFromMIDPitch
(MIDI音高转频率)、GetBeatTemp
(获取节拍速度)等功能。
提供处理ITD(双耳时间差)空间化的FSourceSpatializer
结构和FITDSpatialization
类。
影视系统
为电影渲染管线扩展渲染通道,新增MoviePipelineObjectIdPass
(对象ID通道)和MoviePipelinePanoramicPass
(全景通道)功能。
UI
来自 Lyra’s Plugins: “提供加载屏幕的基类与设置框架”
包含CommonStartupLoadingScreen
和CommonLoadingScreen
模块,自动处理加载期间输入锁定,支持隐藏流式加载场景。通过逐帧查询从关卡到游戏状态,再到所有实现ILoadingProcessInterface
的游戏对象,动态判断是否需要显示加载界面。
来自 Lyra’s Plugins: “UI扩展系统概述: UIExtension Documentation
建立扩展点游戏标签(Extension Point Gameplay Tag)与可激活控件的映射关系。
通过扩展点即可访问所需控件,并按照父级布局自动整合到HUD
中。例如:根据加载的游戏特性插件(Game Feature Plugin
)类型,在HUD
相同位置动态加载不同的得分控件。”
类似于HUD像一个港口,决定了布局与扩展点,而真正的UI通过挂载在对应的扩展点上来实现。
输入
一个用于在Windows
上检测DualShock
控制器输入的插件。
虽然我不太确定为什么不直接使用RawInput
插件。Raw Input Documentation可以在这里找到。
网络
一个新的网络同步系统,允许更精细地控制网络中数据的同步内容和方式。它利用复制图节点来确定哪些数据复制给哪些客户端,并缓存数据以实现更高效、可扩展的同步机制。借助此插件,FNBR可以支持100多名玩家和50000个同步Actor的会话,而不会挤爆网络和CPU的负担。
官方文档:Replication Graph
一个使用AES-GCM算法加密和解密网络数据包的组件。用于保护客户端和服务器之间的网络通信,确保数据传输安全,不会被恶意攻击者拦截或篡改。
另一个用于加密网络的组件,但它不是针对单个数据包,而是使用DTLS(数据报传输层安全)协议保护整个网络连接。用于在客户端和服务器之间建立安全连接,确保所有传输的数据都经过加密和保护。
一个支持新版SteamSockets API的插件,这是在Unreal Engine中处理网络通信的更高效、更灵活的方式。
顾名思义,该框架为在线游戏服务提供了一个标准的共享点。模块包括HotFix
、Lobby
、LoginFlow
、Party
、PatchCheck
、PlayTimeLimit
、Qos
、Rejoin
。
关于此模块的在线资料不多,我们需要自己深入研究代码,看看它在Lyra中是如何实现的。
支持Microsoft Azure PlayFab Party SDK。与其他OSS不同,它更像是一个VOIP解决方案。
相关Github仓库:PlayFabMultiplayerUnreal
PlayFab OSS:PlayFab OSS
支持Steam OSS
。OSS
本质上是一个抽象层,与第三方SDK
(这里是Steam)协作,以便在Steam上正确分发游戏,并与Steam SDK
的会话、认证功能挂钩。
需要区分OnlineSubsystem Plugin
、OnlineServices Plugin
和OnlineServices
。OnlineSubsystemPlugin
是Unreal的概念,封装了与引擎无关的第三方OnlineServices SDK
。例如,Steam Online Service
并不关心游戏是用哪个引擎制作的。而OnlineServices Plugin
是UE5中新的抽象层,旨在取代旧的OnlineSubsystem Plugin
。
官方文档:Online Subsystem
Steam OSS官方文档:Online Subsystem Steam
新的OnlineServices
插件,旨在取代旧的OnlineSubsystem
插件。它提供了更现代、更灵活的方式来处理Unreal Engine中的在线服务,便于与第三方服务集成,并更好地支持跨平台游戏。
基本上是一个开发用的OS插件,没有真实的后端,而是模拟的。
教程:Setup and Configure Online Services and Structure and Implement the Online Services Plugins
一个兼容层,允许新的OnlineServices
插件与旧的OnlineSubsystem
插件协同工作。这对于正在从旧系统过渡到新系统的项目非常有用,因为它可以继续使用现有代码和资源,同时利用OnlineServices
插件的新功能和改进。
Gameplay
这是一个非常庞大的主题。在深入探讨任何插件之前,Epic 提供了一份优秀的文档帮助我们理解UE5中玩法框架的核心概念。Make Interactive Experiences
玩法功能的基础框架,提供基类和子系统以支持玩法框架的模块化使用。例如支持在运行时动态注入组件到游戏中。
这是 UE5 实现模块化游戏功能的方式。它允许我们以模块化的方式创建和管理游戏功能,便于在不影响游戏其他部分的情况下添加、移除或修改功能。
来自 Lyra’s Plugins: “提供基类,使得游戏功能插件能够在运行时加载组件、控件等。 Lyra 的所有基类本身都基于 Modular Gameplay Actors。”
模块化玩法插件概述:Modular Gameplay Plugin Overview
来自 Lyra’s Plugins:
“添加了一个系统,用于将 CommonUI
的可激活控件容器作为‘层级’使用,并提供将控件推送到特定层级的功能。
这有助于将 HUD
放在一个层级,而将设置菜单或暂停菜单推送到其上的另一个层级。
同时也便于使用手柄导航 UI
菜单,因为它们都是通过 CommonUI
可激活控件在不同容器层级中构建的。”
一个用于处理玩家和 AI 与世界交互的框架。尽管这是该插件的描述,但目前似乎仅支持 NPC AI的交互,大量代码与 StateTree
相关。
根据 uplugin
描述:”为 AI 代理封装的即发即弃行为”。从实际代码来看,它似乎是对行为树系统的封装,将黑板值与游戏标签(Gameplay Tags)结合使用。
提供了一些 API 支持,用于通过 Gameplay Behaviors
与智能对象(Smart Objects
)交互。
该插件提供了一套在虚幻引擎中创建和管理智能对象的系统。智能对象是可供 AI
代理使用的交互对象,用于执行特定动作或行为,比如找一个凳子坐下。插件提供了一系列工具和功能,用于在游戏中创建、管理和使用智能对象。
官方文档:Smart Objects
State Tree
是虚幻引擎中用于管理任何需要状态切换(目前主要用于 AI)的新系统。它简化了我们手动管理状态机的流程,并提供了一种统一的方式来处理状态转换、动作和条件。
官方文档:State Tree
GAS
(Gameplay Ability System
)是一个无需在此赘述的庞大主题。它是互联网上讨论和文档最多的系统之一,也是 UE5
中实现游戏交互的首选方式。
官方文档:GAS
社区文档:GAS Community Docs
来自 Lyra’s Plugins:
“添加了一个系统,允许你通过游戏标签(Gameplay Tag
)在游戏中广播和接收事件,并可选择附带包含事件数据的自定义结构体。
例如,如果你击杀了一个角色,可以广播一个特定标签下的事件,提供被击杀者的名称,而 UI 控件可以接收该事件以显示击杀信息。
这些事件仅限于本地玩家,是对 Gameplay Ability System
的 Gameplay Event
(通过网络复制)的很好补充。这两个系统大致类似,Gameplay Message Subsystem
仅限本地客户端范围,而 Gameplay Event
则具有网络客户端范围。”
一个围绕Gameplay Tags
和数据资产构建的模块化框架,用于管理游戏中的分支对话和会话。
它设计用于支持线性和分支对话树,允许 NPC 和玩家交换消息、做出选择并根据游戏状态做出响应。对话可以完全通过资产定义,使设计师无需编写代码即可编辑。
认证系统
来自 Lyra’s Plugins:
“CommonUser
插件在 C++、蓝图脚本和 Online Subsystem(OSS)或其他在线后端之间提供了一个通用接口。它是一个独立的插件,可用于任何项目。
官方文档:Common User Plugin
提供 Common User Subsystem
、Common Session Subsystem
以及一个 Common User Initialize
异步操作。”
QC
这里的插件对自动化测试非常有用,文档参见Automation System Overview。它们能让我们快速创建并运行单元测试。
一个测试框架,允许我们在虚幻引擎中创建和运行功能测试。它提供了一套工具和功能,用于在游戏中创建、管理和运行测试。
官方文档:Functional Testing
一个允许我们在运行时(无论是在编辑器还是打包版本中)执行测试的框架。 目前没有官方文档,因此最好直接阅读代码。我们会在分析Lyra实现时详细介绍它。
这是另一个可以运行测试的自动化测试框架。不同之处在于,Gauntlet的目标更宏观——它并非专注于为测试特定游戏功能构建框架,而是管理整个Unreal Session
。例如,在需要运行4个客户端和1个服务器的多人游戏测试中,Gauntlet会获取正确的构建版本、启动所需进程、运行测试、等待会话结束,最后汇报结果。
性能
来自 Lyra’s Plugins: “GameplayInsights
是一款强大的性能分析工具,可帮助分析和可视化与游戏玩法相关的数据,如复制、网络流量、技能使用情况等。
它与Unreal
的Trace
系统集成,提供时间线、事件追踪和统计跟踪功能,用于诊断游戏过程中的性能和逻辑问题。Lyra利用此工具来测量技能激活和消息路由性能。”
未知插件
,该插件在Lyra中启用,但既不存在于Unreal原生插件中,也不存在于Lyra项目中,可能是Epic内部用于追踪EGPU统计数据的插件。
这是一个框架,用于基于场景中Actor
的重要性(如某些小型VFX在重要性分数低于阈值时会停止播放)提供更精细的流式加载或其他自定义优化控制。
它允许我们根据Actor
与摄像机的距离、可见性等因素定义和管理其重要性,从而通过减少需要渲染或更新的Actor
数量来提升性能。
官方文档:Significance Manager
来自 Lyra’s Plugins:
“此插件简化了关卡流式加载。
它设计为一种更简洁、紧凑的解决方案,替代传统在菜单中渲染3D角色的方法(传统方法通常需要加载正常游戏边界外的地图)。
优秀的Pocket Worlds示例和文档: Pocket Worlds Documentation”
项目结构
项目可以进一步划分为更多模块。在后续文章中深入探讨之前,我们先整体浏览它们。(标注为‘Extend’的类别表示它们或多或少是Lyra核心架构的扩展。即使没有这些模块,项目仍可编译,但它们对实际游戏内容至关重要。)
完全核心
这部分的代码在Codebase中缺一不可,通常是核心3C等框架,几乎所有游戏类型都会需要的框架。
音效
- /Audio
- AudioMixEffectsSubsystem
- AudioSettings
动画
- /Animation
- AnimInstance
角色
- /Character
- Pawn
- PawnData
- Character
- CharacterWithAbilities
- CharacterMovementComponent
- HealthComponent
- HeroComponent
- PawnExtensionComponent
输入
- /Input
- InputComponent
- InputConfig
物理
- /Physics
- CollisionChannels
- PhysicalMaterialWithTags
玩家
- /Player
- CheatManager
- DebugCameraController
- LocalPlayer
- PlayerBotController
- PlayerController
- PlayerSpawningManagerComponent
- PlayerStart
- PlayerState
强核心相关扩展
这部分的代码通常对游戏核心来说有一些至关重要的基类存在,然后由子类扩展成实际游戏内容相关的逻辑,依然是几乎所有游戏类型都会需要的框架。
摄像机
- /Camera
- CameraAssistInterface
- CameraComponent
- PlayerCameraManager
- UICameraManagerComponent
- CameraMode
- (Extend) CameraMode_ThirdPerson
- (Extend) PenetrationAvoidanceFeeler
游戏模式
- /GameModes
- ExperienceActionSet
- ExperienceDefinition
- ExperienceManager
- ExperienceManagerComponent
- GameMode
- GameState
- WorldSettings
- UserFacingExperienceDefinition
- (Extend) AsyncAction_ExperienceReady
- (Extend) BotCreationComponent
开发
- /Development
- DeveloperSettings
- PlatformEmulationSettings
- (Extend) BotCheats
信息
- /Messages
- VerbMessage
- VerbMessageHelpers
- (Extend) VerbMessageReplication
- (Extend) NotificationMessage
- (Extend) GameplayMessageProcessor
性能
- /Performance
- PerformanceSettings
- PerformanceStatSubsystem
- PerformanceStatTypes
- (Extend) MemoryDebugCommands
系统
- /System
- GameplayTagStack
- AssetManager
- AssetManagerStartupJob
- GameData
- GameSession
- SignificanceManager
- SystemStatics
- (Extend) GameEngine
- (Extend) GameInstance
- (Extend) ReplicationGraph
- (Extend) ReplicationGraphSettings
- (Extend) ReplicationGraphType
- (Extend) ActorUtilities
- (Extend) DevelopmentStatics
弱核心相关扩展
相对核心来说,这部分的模块会因项目而异,更多的从核心跨度到具体项目类型,尽管大部分模块对多数项目类型来说依然是很重要。这部分代码通常是提供了少数的抽象接口,然后大量由项目相关的子类扩展出具体业务逻辑
技能系统
- /Abilities
- AbilitySimpleFailureMessage
- AbilityCost
- (Extend) AbilityCost_InventoryItem
- (Extend) AbilityCost_ItemTagStack
- (Extend) AbilityCost_PlayerTagStack
- (Extend) GameplayAbility
- (Extend) GameplayAbility_Death
- (Extend) GameplayAbility_Jump
- (Extend) GameplayAbility_Reset
- /Attributes
- AttributeSet
- (Extend) CombatSet
- (Extend) HealthSet
- /Executions
- (Extend) DamageExecution
- (Extend) HealExecution
- (Extend) /Phases
- (Extend) PhaseAbility
- (Extend) PhaseLog
- (Extend) PhaseSubsystem
- AbilitySet
- AbilitySourceInterface
- AbilitySystemComponent
- AbilitySystemGlobals
- AbilityTagRelationshipMapping
- GameplayCueManager
- GameplayEffectContext
- GlobalAbilitySystem
- TaggedActor
- (Extend) GameplayAbilityTargetData_SingleTargetHit
反馈
- /Feedback
- /ContextEffects
- ContextEffectsLibrary
- (Extend) ContextEffectComponent
- (Extend) ContextEffectsInterface
- (Extend) ContextEffectsSubsystem
- (Extend) AnimNotify_ContextEffect
- (Extend) /NumberPops
- (Extend) DamagePopStyle
- (Extend) NumberPopComponent
- (Extend) NumberPopComponent_MeshText
- (Extend) NumberPopComponent_NiagaraText
- /ContextEffects
GameFeatures
- /GameFeatures
- GameFeatureAction_AddInputContextMapping
- GameFeatureAction_WorldActionBase
- (Extend) GameFeaturePolicy
- (Extend) GameFeatureAction_AddAbilities
- (Extend) GameFeatureAction_AddGameplayCuePath
- (Extend) GameFeatureAction_AddInputBinding
- (Extend) GameFeatureAction_AddWidget
- (Extend) GameFeatureAction_SplitscreenConfig
- (Extend) GameFeatureAction_WorldActionBase
背包
- /Inventory
- IPickupable
- InventoryItemDefinition
- InventoryItemInstance
- InventoryManagerComponent
- (Extend) InventoryFragment_EquippableItem
- (Extend) InventoryFragment_PickupIcon
- (Extend) InventoryFragment_QuickBarIcon
- (Extend) InventoryFragment_SetStats
UI
- /UI
- (Extend) /Basic
- (Extend) MaterialProgressBar
- (Extend) /Common
- (Extend) BoundActionButton
- (Extend) ListView
- (Extend) TabButtonBase
- (Extend) TabListWidgetBase
- (Extend) WidgetFactory
- (Extend) WidgetFactory_Class
- (Extend) /Foundation
- (Extend) ActionWidget
- (Extend) ButtonBase
- (Extend) ConfirmationScreen
- (Extend) ControllerDisconnectedScreen
- (Extend) LoadingScreenSubsystem
- (Extend) /Frontend
- (Extend) ApplyFrontendSettingsAction
- (Extend) FrontendStateComponent
- (Extend) LobbyBackground
- (Extend) /IndicatorSystem
- (Extend) IActorIndicatorWidget
- (Extend) IndicatorDescriptor
- (Extend) IndicatorLayer
- (Extend) IndicatorLibrary
- (Extend) IndicatorManagerComponent
- (Extend) SActorCanvas
- (Extend) /PerformanceStats
- (Extend) PerfStatContainerBase
- (Extend) PerfStatWidgetBase
- (Extend) /Subsystem
- (Extend) UIManagerSubsystem
- (Extend) UIMessaging
- (Extend) /Weapons
- (Extend) SCircumferenceMarkerWidget
- (Extend) CircumferenceMarkerWidget
- (Extend) SHitMarkerConfirmationWidget
- (Extend) HitMarkerConfirmationWidget
- (Extend) ReticleWidgetBase
- (Extend) WeaponUserInterface
- HUD
- (Extend) HUDLayout
- (Extend) ActivatableWidget
- (Extend) GameViewportClient
- (Extend) JoystickWidget
- (Extend) SettingScreen
- (Extend) SimulatedInputWidget
- (Extend) TaggedWidget
- (Extend) TouchRegion
- (Extend) /Basic
回放
- /Replays
- ReplaySubsystem
- (Extend) AsyncAction_QueryReplays
设置
- /Settings
- SettingsLocal
- SettingsShared
- (Extend) /CustomSettings
- (Extend) SettingKeyboardInput
- (Extend) SettingAction_SafeZoneEditor
- (Extend) SettingValueDiscrete_Language
- (Extend) SettingValueDiscrete_MobileFPSType
- (Extend) SettingValueDiscrete_OverallQuality
- (Extend) SettingValueDiscrete_PerfStat
- (Extend) SettingValueDiscrete_Resolution
- (Extend) SettingValueDiscreteDynamic_AudioOutputDevice
- (Extend) /Screens
- (Extend) BrightnessEditor
- (Extend) SafeZoneEditor
- (Extend) /Widgets
- (Extend) SettingsListEntrySetting_KeyboardInput
- (Extend) GameSettingRegistry
- (Extend) GameSettingRegistry_Audio
- (Extend) GameSettingRegistry_Gamepad
- (Extend) GameSettingRegistry_Gameplay
- (Extend) GameSettingRegistry_MouseAndKeyboard
- (Extend) GameSettingRegistry_Video
- (Extend) GameSettingRegistry_PerfStats
团队
- /Teams
- TeamAgentInterface
- TeamCheats
- TeamDisplayAsset
- TeamInfoBase
- TeamPrivateInfo
- TeamPublicInfo
- TeamStatics
- TeamSubsystem
- (Extend) TeamCreationComponent
- (Extend) AsyncAction_ObserveTeam
- (Extend) AsyncAction_ObserveTeamColors
测试
- /Tests
- GameplayRpcRegistrationComponent
- (Extend) TestControllerBootTest
完全扩展
这部分的代码对游戏核心框架并不重要,但对游戏本身很重要。它们通常是游戏内容强相关的逻辑,视觉反馈,互动,道具等。
(Extend) 视觉装饰
- (Extend) /Cosmetics
- (Extend) CharacterPartTypes
- (Extend) ControllerComponent_CharacterParts
- (Extend) CosmeticAnimationTypes
- (Extend) CosmeticCheats
- (Extend) CosmeticDeveloperSettings
- (Extend) PawnComponent_CharacterParts
(Extend) 装备
- (Extend) /Equipment
- (Extend) EquipmentDefinition
- (Extend) EquipmentInstance
- (Extend) EquipmentManagerComponent
- (Extend) GameplayAbility_FromEquipment
- (Extend) PickupDefinition
- (Extend) QuickBarComponent
(Extend) 武器
- (Extend) /Weapons
- (Extend) WeaponDebugSettings
- (Extend) WeaponInstance
- (Extend) WeaponSpawner
- (Extend) WeaponStateComponent
- (Extend) RangedWeaponInstance
- (Extend) GameplayAbility_RangedWeapon
- (Extend) DamageLogDebuggerComponent
- (Extend) InventoryFragment_ReticleConfig
(Extend) Hotfix
- (Extend) /Hotfix
- (Extend) HotfixManager
- (Extend) RuntimeOptions
- (Extend) TextHotfixConfig
(Extend) 互动
- (Extend) /Interaction
- (Extend) /Abilities
- (Extend) GameplayAbilityTargetActor_Interact
- (Extend) GameplayAbility_Interact
- (Extend) /Tasks
- (Extend) AbilityTask_GrantNearbyInteraction
- (Extend) AbilityTask_WaitForInteractableTargets
- (Extend) AbilityTask_WaitForInteractableTargets_SingleLineTrace
- (Extend) IInteractableTarget
- (Extend) IInteractionInstigator
- (Extend) InteractionOption
- (Extend) InteractionQuery
- (Extend) InteractionStatics
- (Extend) InteractionDurationMessage
- (Extend) /Abilities