Lyra技术解析 - 插件结构 | ebp Lyra技术解析 - 插件结构 | ebp Lyra技术解析 - 插件结构 | ebp
文章

Lyra技术解析 - 插件结构

本文深入研究了Lyra中的插件,所以您就不用再遭罪了。这些插件已与相关文档一起整理编译,方便搜索。

Lyra技术解析 - 插件结构

本文内容基于Unreal Engine 5.5.4

如果我犯了错误,请在下面评论并帮助未来的读者!本文中文翻译由AI机翻,可能不够准确或产生一定的阅读困难。

这是一系列关于我从Epic的Lyra项目中学到的知识笔记。该项目声称展示了当前虚幻引擎框架下的最佳实践。其中有些内容是我之前不了解的,有些则已经知晓,但认为仍然值得记录。

所有插件及分类

Lyra启用了大量插件,这些插件可分为若干组别,涵盖从后端到前端的全流程。其核心理念在于:所有插件都在不同程度上为实际项目功能服务,因此若不结合具体项目很难单独讨论。最终这个系列将会涉及这些内容,不过得一口一口来,接下来是第一口:

这里还有其他关于插件的文章:Lyra’s PluginsUE5 StudyZomg’s Unreal Engine NotesStandard Plugins

设置相关

GameSettings

来自Lyra’s Plugins: “为项目中设置界面处理添加基类。 基于CommonUIActivatableWidgets构建,因此将使用该系统作为其基础界面类。

需注意所有设置数据均在C++中声明,这意味着设计人员在没有工程师协助的情况下无法扩展。”

Editor Tools

ActorPalette

该插件为编辑器添加新选项卡,可快速向关卡添加Actor。本质上会打开新关卡,支持在不同关卡间拖放Actors。

简易视频教程:

Lyra Ext Tool

来自Lyra’s Plugins: “添加EUW_MaterialTool,这是在Lyra材质编辑器中实用的编辑器控件。 同时添加BP函数Change Mesh Materials,该函数在网格体变更时显式调用PostEditChange。”

资产管理

AsyncMixin

用于管理异步操作(如加载)的C++工具类。

DataRegistry

虚幻引擎中管理数据资产的高级系统。允许创建数据资产注册表,并提供运行时查询和操作方式。这是对DataTableCurveTable系统的升级,更接近数据库概念。

其最大优势在于DataRegistry以解耦方式通过统一API从任何可用资源获取数据。不再需要硬引用DataTableCurveTable,只需使用DataRegistry API即可从任意来源同步/异步获取数据,甚至支持缓存。

官方文档: Data Registry

教程: Data Registry Tutorial

AssetSearch

该插件用于增强虚幻引擎的搜索功能。支持通过资产类型、名称、标签等多种条件搜索项目资源,甚至可搜索打印的常量字符串等参数。

AssetReferenceRestrictions

用于阻止某些资产被其他资产引用的插件。可有效防止循环依赖或确保特定资产不在某些上下文中使用。例如DLC数据应引用基础游戏内容,但反之则不行。

几何工具

ModelingToolsEditorMode

为虚幻引擎添加了一个新编辑器模式,支持直接在编辑器中创建和操作3D模型。适用于无需离开编辑器即可创建自定义资产或修改现有资产。不过相比BlenderMaya等专业3D软件,该工具在控制和精度上有所欠缺,更像是原型工具而非生产工具。

社区文档: Modeling Tools Community Docs

视频:

GeometryScripting

功能类似Houdini,可通过该插件实现程序化建模。也可用于运行时生成碰撞框或其他几何体。

官方教程: Geometry Scripting Official Tutorial

社区教程: Geometry Scripting Community Tutorial

渲染与图形

Volumetrics

使用蓝图创建和渲染体积效果的工具库。

该插件提供VolumetricCloudFunctions.ush文件

Niagara

虚幻引擎中的VFX系统,用于创建复杂粒子效果和模拟。支持实时渲染粒子、流体等视觉效果。

官方文档: Niagara

Water

用于创建逼真水面效果的插件。提供水物理模拟、反射、折射等水相关视觉效果工具。

官方文档:Water

动画系统

AnimationLocomotionLibrary

提供距离匹配(DistanceMatching)和角色移动功能的蓝图函数库。

Distance Matching 文档展示了该库的实际应用案例。

AnimationWarping

提供动画变形功能的工具库,包含方向变形(OrientationWarping)、坡度变形(SlopeWarping)、步幅变形(StrideWarping)等。

ContextualAnimation

该插件实现了多角色动画在蒙太奇中的同步功能,可流畅制作处决技、找个凳子坐下动作、扶墙动作等复杂互动动画。

推荐学习 CAS Tutorial 获取详细指导。

音频系统

Metasound

无需赘述的知名复杂音频系统,Epic官方提供专属 Metasound Documentation 文档

AudioModulation

为引擎添加音频调制、控制总线(Control Bus)和混音总线功能,在概念上类似UE4的音频Ducking系统,但控制总线方案更灵活强大,操作体验接近Wwise等专业DAW

入门推荐 Audio Modulation Quick Start

详细功能请参阅 Audio Modulation Documentation

AudioGameplayVolume

通过体积控件自动管理混响等音频特性的小型插件,替代传统蓝图/代码手动配置方案,已内置混响(Reverb)、子混音(Submix)、衰减(Attenuation)等功能。这个功能的设计思想是,原本如果我们需要给音源加一个混响,我们可能会直接静态加在音源上,或者动态推给Submix,或者通过RTPC在Metasound中动态控制。现在我们可以把他绑在一个体积盒中,这样我们就可以创造类似“所有在这个体积中的音源可以获得一个混响效果,所有不在这个体积重的音源可以获得一个低通滤波,之类的”

相关文档 Audio Gameplay Volume

AudioGameplay

类似Gameplay Ability但是是为了Audio而生的音频响应系统,使音频组件能根据游戏事件(如进入区域、交互行为、生命值变化等)触发特定音频逻辑。

SoundUtilities

音频工具库,提供GetQFromBandwidth(通过带宽获取Q值)、ConvertDecibelsToLinear(分贝转线性值)、GetFrequencyFromMIDPitch(MIDI音高转频率)、GetBeatTemp(获取节拍速度)等功能。

Spatialization

提供处理ITD(双耳时间差)空间化的FSourceSpatializer结构和FITDSpatialization类。

影视系统

MovieRenderPipeline

虚幻引擎的离线渲染框架,专为电影、过场动画等线性内容的高质量渲染设计,提供专业级图像/视频输出工具。

官方文档:Movie Render Pipeline

MoviePipelineMaskRenderPass

为电影渲染管线扩展渲染通道,新增MoviePipelineObjectIdPass(对象ID通道)和MoviePipelinePanoramicPass(全景通道)功能。

UI

CommonUI

革命性UI解决方案,在UMG基础上全面革新,有效解决传统游戏UI痛点。网络有丰富学习资源。

官方文档:CommonUI Plugin

CommonLoadingScreen

来自 Lyra’s Plugins: “提供加载屏幕的基类与设置框架”

包含CommonStartupLoadingScreenCommonLoadingScreen模块,自动处理加载期间输入锁定,支持隐藏流式加载场景。通过逐帧查询从关卡到游戏状态,再到所有实现ILoadingProcessInterface的游戏对象,动态判断是否需要显示加载界面。

GameSubtitles

来自 Lyra’s Plugins: “提供字幕显示子系统”

也支持将游戏字幕控件绑定至媒体播放器(Media Player)。

UIExtension

来自 Lyra’s Plugins: “UI扩展系统概述: UIExtension Documentation

建立扩展点游戏标签(Extension Point Gameplay Tag)与可激活控件的映射关系。

通过扩展点即可访问所需控件,并按照父级布局自动整合到HUD中。例如:根据加载的游戏特性插件(Game Feature Plugin)类型,在HUD相同位置动态加载不同的得分控件。”

类似于HUD像一个港口,决定了布局与扩展点,而真正的UI通过挂载在对应的扩展点上来实现。

输入

EnhancedInput

同样是一个著名的新系统,用于取代UE4中的旧输入系统。无需过多介绍。

官方文档:Enhanced Input

WinDualShock

一个用于在Windows上检测DualShock控制器输入的插件。

虽然我不太确定为什么不直接使用RawInput插件。Raw Input Documentation可以在这里找到。

网络

ReplicationGraph

一个新的网络同步系统,允许更精细地控制网络中数据的同步内容和方式。它利用复制图节点来确定哪些数据复制给哪些客户端,并缓存数据以实现更高效、可扩展的同步机制。借助此插件,FNBR可以支持100多名玩家和50000个同步Actor的会话,而不会挤爆网络和CPU的负担。

官方文档:Replication Graph

官方直播:Replication Graph Live Stream

AESGCMHandlerComponent

一个使用AES-GCM算法加密和解密网络数据包的组件。用于保护客户端和服务器之间的网络通信,确保数据传输安全,不会被恶意攻击者拦截或篡改。

DTLSHandlerComponent

另一个用于加密网络的组件,但它不是针对单个数据包,而是使用DTLS(数据报传输层安全)协议保护整个网络连接。用于在客户端和服务器之间建立安全连接,确保所有传输的数据都经过加密和保护。

SteamSockets

一个支持新版SteamSockets API的插件,这是在Unreal Engine中处理网络通信的更高效、更灵活的方式。

官方文档:SteamSockets Documentation

教程:SteamSockets Tutorial

OnlineFramework

顾名思义,该框架为在线游戏服务提供了一个标准的共享点。模块包括HotFixLobbyLoginFlowPartyPatchCheckPlayTimeLimitQosRejoin

关于此模块的在线资料不多,我们需要自己深入研究代码,看看它在Lyra中是如何实现的。

PlayFabParty

支持Microsoft Azure PlayFab Party SDK。与其他OSS不同,它更像是一个VOIP解决方案。

相关Github仓库:PlayFabMultiplayerUnreal

PlayFab OSS:PlayFab OSS

OnlineSubsystemSteam

支持Steam OSSOSS本质上是一个抽象层,与第三方SDK(这里是Steam)协作,以便在Steam上正确分发游戏,并与Steam SDK的会话、认证功能挂钩。 需要区分OnlineSubsystem PluginOnlineServices PluginOnlineServicesOnlineSubsystemPlugin是Unreal的概念,封装了与引擎无关的第三方OnlineServices SDK。例如,Steam Online Service并不关心游戏是用哪个引擎制作的。而OnlineServices Plugin是UE5中新的抽象层,旨在取代旧的OnlineSubsystem Plugin

官方文档:Online Subsystem

Steam OSS官方文档:Online Subsystem Steam

教程:UE Online Subsystem Steam Tutorial

OnlineSubsystemEOS

类似于Steam OSS,但服务提供商是EOS。

EOS OSS官方文档:EOS OSS Documentation

教程:EOS OSS Tutorial

OnlineServicesEOS

新的OnlineServices插件,旨在取代旧的OnlineSubsystem插件。它提供了更现代、更灵活的方式来处理Unreal Engine中的在线服务,便于与第三方服务集成,并更好地支持跨平台游戏。

官方文档:Online Service EOS, Online Service Overview

OnlineServicesNull

基本上是一个开发用的OS插件,没有真实的后端,而是模拟的。

教程:Setup and Configure Online Services and Structure and Implement the Online Services Plugins

OnlineServicesOSSAdapter

一个兼容层,允许新的OnlineServices插件与旧的OnlineSubsystem插件协同工作。这对于正在从旧系统过渡到新系统的项目非常有用,因为它可以继续使用现有代码和资源,同时利用OnlineServices插件的新功能和改进。

Gameplay

这是一个非常庞大的主题。在深入探讨任何插件之前,Epic 提供了一份优秀的文档帮助我们理解UE5中玩法框架的核心概念。Make Interactive Experiences

ModularGameplay

玩法功能的基础框架,提供基类和子系统以支持玩法框架的模块化使用。例如支持在运行时动态注入组件到游戏中。

GameFeatures

这是 UE5 实现模块化游戏功能的方式。它允许我们以模块化的方式创建和管理游戏功能,便于在不影响游戏其他部分的情况下添加、移除或修改功能。

ModularGameplayActors

来自 Lyra’s Plugins: “提供基类,使得游戏功能插件能够在运行时加载组件、控件等。 Lyra 的所有基类本身都基于 Modular Gameplay Actors。”

模块化玩法插件概述:Modular Gameplay Plugin Overview

CommonGame

来自 Lyra’s Plugins: “添加了一个系统,用于将 CommonUI 的可激活控件容器作为‘层级’使用,并提供将控件推送到特定层级的功能。 这有助于将 HUD 放在一个层级,而将设置菜单或暂停菜单推送到其上的另一个层级。

同时也便于使用手柄导航 UI 菜单,因为它们都是通过 CommonUI 可激活控件在不同容器层级中构建的。”

GameplayInteractions

一个用于处理玩家和 AI 与世界交互的框架。尽管这是该插件的描述,但目前似乎仅支持 NPC AI的交互,大量代码与 StateTree 相关。

GameplayBehaviors

根据 uplugin 描述:”为 AI 代理封装的即发即弃行为”。从实际代码来看,它似乎是对行为树系统的封装,将黑板值与游戏标签(Gameplay Tags)结合使用。

GameplayBehaviorSmartObjects

提供了一些 API 支持,用于通过 Gameplay Behaviors 与智能对象(Smart Objects)交互。

SmartObjects

该插件提供了一套在虚幻引擎中创建和管理智能对象的系统。智能对象是可供 AI 代理使用的交互对象,用于执行特定动作或行为,比如找一个凳子坐下。插件提供了一系列工具和功能,用于在游戏中创建、管理和使用智能对象。

官方文档:Smart Objects

GameplayStateTree

State Tree 是虚幻引擎中用于管理任何需要状态切换(目前主要用于 AI)的新系统。它简化了我们手动管理状态机的流程,并提供了一种统一的方式来处理状态转换、动作和条件。

官方文档:State Tree

GameplayAbilities

GASGameplay Ability System)是一个无需在此赘述的庞大主题。它是互联网上讨论和文档最多的系统之一,也是 UE5 中实现游戏交互的首选方式。

官方文档:GAS

社区文档:GAS Community Docs

GameplayMessageRouter

来自 Lyra’s Plugins: “添加了一个系统,允许你通过游戏标签(Gameplay Tag)在游戏中广播和接收事件,并可选择附带包含事件数据的自定义结构体。 例如,如果你击杀了一个角色,可以广播一个特定标签下的事件,提供被击杀者的名称,而 UI 控件可以接收该事件以显示击杀信息。

这些事件仅限于本地玩家,是对 Gameplay Ability SystemGameplay Event(通过网络复制)的很好补充。这两个系统大致类似,Gameplay Message Subsystem 仅限本地客户端范围,而 Gameplay Event 则具有网络客户端范围。”

CommonConversation

一个围绕Gameplay Tags和数据资产构建的模块化框架,用于管理游戏中的分支对话和会话。 它设计用于支持线性和分支对话树,允许 NPC 和玩家交换消息、做出选择并根据游戏状态做出响应。对话可以完全通过资产定义,使设计师无需编写代码即可编辑。

ControlFlows

该插件提供了一种模块化和声明式的方式在代码中定义流程任务。比如定义一个登录流程,或者加载一系列关卡内容等。

教程链接:ControlFlows Tutorial

认证系统

CommonUser

来自 Lyra’s Plugins: “CommonUser 插件在 C++、蓝图脚本和 Online Subsystem(OSS)或其他在线后端之间提供了一个通用接口。它是一个独立的插件,可用于任何项目。

官方文档:Common User Plugin

提供 Common User SubsystemCommon Session Subsystem 以及一个 Common User Initialize 异步操作。”

QC

这里的插件对自动化测试非常有用,文档参见Automation System Overview。它们能让我们快速创建并运行单元测试。

FunctionalTestingEditor

一个测试框架,允许我们在虚幻引擎中创建和运行功能测试。它提供了一套工具和功能,用于在游戏中创建、管理和运行测试。

官方文档:Functional Testing

RuntimeTests

一个允许我们在运行时(无论是在编辑器还是打包版本中)执行测试的框架。 目前没有官方文档,因此最好直接阅读代码。我们会在分析Lyra实现时详细介绍它。

Gauntlet

这是另一个可以运行测试的自动化测试框架。不同之处在于,Gauntlet的目标更宏观——它并非专注于为测试特定游戏功能构建框架,而是管理整个Unreal Session。例如,在需要运行4个客户端和1个服务器的多人游戏测试中,Gauntlet会获取正确的构建版本、启动所需进程、运行测试、等待会话结束,最后汇报结果。

官方文档:Gauntlet, Run Gauntlet Tests, Gauntlet Primer

性能

GameplayInsights

来自 Lyra’s Plugins: “GameplayInsights是一款强大的性能分析工具,可帮助分析和可视化与游戏玩法相关的数据,如复制、网络流量、技能使用情况等。

它与UnrealTrace系统集成,提供时间线、事件追踪和统计跟踪功能,用于诊断游戏过程中的性能和逻辑问题。Lyra利用此工具来测量技能激活和消息路由性能。”

D3DExternalGPUStatistics

未知插件,该插件在Lyra中启用,但既不存在于Unreal原生插件中,也不存在于Lyra项目中,可能是Epic内部用于追踪EGPU统计数据的插件。

SignificanceManager

这是一个框架,用于基于场景中Actor的重要性(如某些小型VFX在重要性分数低于阈值时会停止播放)提供更精细的流式加载或其他自定义优化控制。

它允许我们根据Actor与摄像机的距离、可见性等因素定义和管理其重要性,从而通过减少需要渲染或更新的Actor数量来提升性能。

官方文档:Significance Manager

PocketWorlds

来自 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

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

回放

  • /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
本文由作者按照 CC BY 4.0 进行授权