news 2026/4/16 12:36:00

Lyra Starter Game 中 GameFeature 类(如 ShooterCore)的加载流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Lyra Starter Game 中 GameFeature 类(如 ShooterCore)的加载流程

Lyra Starter Game 中 GameFeature 类(如 ShooterCore)的加载流程

1. GameFeature 系统概述

GameFeature 是 Unreal Engine 5 的一个核心插件系统,用于模块化地扩展游戏功能。在 Lyra Starter Game 中,ShooterCore 是一个典型的 GameFeature 插件,它提供了射击游戏的核心玩法系统。

2. GameFeature 核心组件

2.1 UGameFeatureData 类

UGameFeatureData 是 GameFeature 的核心数据资产类,定义在引擎的 GameFeatures 插件中:

// 定义在 C:\UnrealEngine-5.6.1-release\Engine\Plugins\Runtime\GameFeatures\Source\GameFeatures\Public\GameFeatureData.hUCLASS(MinimalAPI)classUGameFeatureData:publicUPrimaryDataAsset{GENERATED_BODY()// 游戏特性的主要行为定义UPROPERTY(EditDefaultsOnly,Instanced,Category="Game Feature | Actions")TArray<TObjectPtr<UGameFeatureAction>>Actions;// 需要扫描的主资产类型UPROPERTY(EditAnywhere,Category="Game Feature | Asset Manager")TArray<FPrimaryAssetTypeInfo>PrimaryAssetTypesToScan;};

2.2 UGameFeatureAction 类

UGameFeatureAction 是 GameFeature 的具体行为实现,每个 GameFeatureData 包含多个 Action,用于执行特定功能:

  • GameFeatureAction_AddAbilities:添加游戏能力
  • GameFeatureAction_AddInputBinding:添加输入绑定
  • GameFeatureAction_AddWidget:添加 UI 控件
  • GameFeatureAction_AddGameplayCuePath:添加游戏玩法提示路径

3. ShooterCore 插件结构

ShooterCore 插件是一个典型的 GameFeature 插件,其结构如下:

ShooterCore/ ├── Content/ │ └── ShooterCore.uasset # GameFeatureData 配置文件 ├── Source/ │ └── ShooterCoreRuntime/ # 运行时代码 │ ├── Private/ # 私有实现 │ └── Public/ # 公共接口 └── ShooterCore.uplugin # 插件描述文件

4. GameFeature 加载流程

4.1 插件注册阶段

  1. 插件发现:引擎启动时,会扫描所有已启用的 GameFeature 插件
  2. GameFeatureData 加载:为每个 GameFeature 插件加载其 GameFeatureData 配置文件(如 ShooterCore.uasset)
  3. 观察者通知:调用所有观察者的OnGameFeatureRegistering方法

Lyra 项目中,ULyraGameFeature_AddGameplayCuePaths是一个观察者,用于在注册阶段添加 GameplayCue 路径:

// 定义在 LyraGameFeaturePolicy.cppvoidULyraGameFeature_AddGameplayCuePaths::OnGameFeatureRegistering(constUGameFeatureData*GameFeatureData,constFString&PluginName,constFString&PluginURL){for(constUGameFeatureAction*Action:GameFeatureData->GetActions()){if(constUGameFeatureAction_AddGameplayCuePath*AddGameplayCueGFA=Cast<UGameFeatureAction_AddGameplayCuePath>(Action)){// 添加 GameplayCue 路径constTArray<FDirectoryPath>&DirsToAdd=AddGameplayCueGFA->GetDirectoryPathsToAdd();if(ULyraGameplayCueManager*GCM=ULyraGameplayCueManager::Get()){for(constFDirectoryPath&Directory:DirsToAdd){FString MutablePath=Directory.Path;UGameFeaturesSubsystem::FixPluginPackagePath(MutablePath,PluginRootPath,false);GCM->AddGameplayCueNotifyPath(MutablePath,false);}// 重新构建运行时库GCM->InitializeRuntimeObjectLibrary();}}}}

4.2 插件加载阶段

  1. 依赖检查:检查插件的依赖是否已满足
  2. 资源预加载:根据 GameFeatureData 配置预加载所需资源
  3. 观察者通知:调用所有观察者的OnGameFeatureLoading方法

Lyra 项目中,ULyraGameFeature_HotfixManager是一个观察者,用于在加载阶段处理热修复:

// 定义在 LyraGameFeaturePolicy.cppvoidULyraGameFeature_HotfixManager::OnGameFeatureLoading(constUGameFeatureData*GameFeatureData,constFString&PluginURL){if(ULyraHotfixManager*HotfixManager=Cast<ULyraHotfixManager>(UOnlineHotfixManager::Get(nullptr))){HotfixManager->RequestPatchAssetsFromIniFiles();}}

4.3 插件激活阶段

  1. Action 激活:遍历 GameFeatureData 中的所有 GameFeatureAction,调用它们的OnGameFeatureActivating方法
  2. 世界集成:将 GameFeature 集成到当前游戏世界中
  3. 观察者通知:调用所有观察者的OnGameFeatureActivating方法

GameFeatureAction_AddAbilities为例,它会在激活时为指定的 Actor 类添加能力:

// 定义在 GameFeatureAction_AddAbilities.cppvoidUGameFeatureAction_AddAbilities::OnGameFeatureActivating(FGameFeatureActivatingContext&Context){FPerContextData&ActiveData=ContextData.FindOrAdd(Context);if(!ensureAlways(ActiveData.ActiveExtensions.IsEmpty())||!ensureAlways(ActiveData.ComponentRequests.IsEmpty())){Reset(ActiveData);}Super::OnGameFeatureActivating(Context);}

4.4 插件运行阶段

GameFeature 激活后,其定义的功能(如能力、输入、UI 等)将在游戏中生效。

4.5 插件停用阶段

  1. Action 停用:遍历 GameFeatureData 中的所有 GameFeatureAction,调用它们的OnGameFeatureDeactivating方法
  2. 资源清理:清理 GameFeature 使用的资源
  3. 观察者通知:调用所有观察者的OnGameFeatureDeactivating方法

4.6 插件卸载阶段

  1. 资源卸载:卸载 GameFeature 使用的资源
  2. 插件移除:从系统中移除 GameFeature
  3. 观察者通知:调用所有观察者的OnGameFeatureUnregistering方法

5. ShooterCore 插件的具体加载流程

5.1 插件描述文件

ShooterCore.uplugin 定义了插件的基本信息和依赖:

{"FileVersion":3,"Version":1,"VersionName":"1.0","FriendlyName":"ShooterCore","Description":"Gameplay systems for Game1 / Shooter Game","Category":"Game Features","ExplicitlyLoaded":true,"EnabledByDefault":false,"BuiltInInitialFeatureState":"Registered","Modules":[{"Name":"ShooterCoreRuntime","Type":"Runtime","LoadingPhase":"Default"}],"Plugins":[{"Name":"GameplayAbilities","Enabled":true},{"Name":"ModularGameplay","Enabled":true},// 其他依赖插件]}

5.2 运行时模块初始化

ShooterCoreRuntimeModule.cpp 定义了模块的初始化和关闭逻辑:

// 定义在 ShooterCoreRuntimeModule.cppvoidFShooterCoreRuntimeModule::StartupModule(){// 模块初始化逻辑}voidFShooterCoreRuntimeModule::ShutdownModule(){// 模块关闭逻辑}

5.3 GameFeatureData 配置

ShooterCore.uasset 配置文件包含了 ShooterCore 的所有 GameFeatureAction,如:

  • 添加射击游戏的核心能力
  • 注册输入映射
  • 添加 UI 控件
  • 配置游戏玩法提示

6. Lyra 自定义的 GameFeature 策略

LyraGameFeaturePolicy 是 Lyra 项目自定义的 GameFeature 策略类,用于控制 GameFeature 的加载模式和观察者:

// 定义在 LyraGameFeaturePolicy.hUCLASS(MinimalAPI,Config=Game)classULyraGameFeaturePolicy:publicUGameFeaturesProjectPolicies{GENERATED_BODY()public:// 获取单例实例staticULyraGameFeaturePolicy&Get();// 初始化游戏特性管理器virtualvoidInitGameFeatureManager()override;// 关闭游戏特性管理器virtualvoidShutdownGameFeatureManager()override;// 获取游戏特性加载模式virtualvoidGetGameFeatureLoadingMode(bool&bLoadClientData,bool&bLoadServerData)constoverride;};

7. 总结

GameFeature 是 Lyra Starter Game 中实现模块化功能扩展的核心机制,ShooterCore 作为一个典型的 GameFeature 插件,其加载流程遵循了 Unreal Engine 5 的 GameFeature 生命周期:

  1. 注册阶段:发现插件并加载 GameFeatureData
  2. 加载阶段:检查依赖并预加载资源
  3. 激活阶段:执行 GameFeatureAction 并集成到游戏世界
  4. 运行阶段:功能生效
  5. 停用阶段:清理资源和功能
  6. 卸载阶段:移除插件

通过这种模块化的设计,Lyra Starter Game 可以灵活地扩展和管理游戏功能,提高代码的可维护性和复用性。

关键文件路径

  1. GameFeature 核心定义:C:\UnrealEngine-5.6.1-release\Engine\Plugins\Runtime\GameFeatures\Source\GameFeatures\Public\GameFeatureData.h
  2. Lyra GameFeature 策略:c:\Users\ChenChao\Documents\GitCode\LyraStarterGame_5.6\Source\LyraGame\GameFeatures\LyraGameFeaturePolicy.h
  3. ShooterCore 插件描述:c:\Users\ChenChao\Documents\GitCode\LyraStarterGame_5.6\Plugins\GameFeatures\ShooterCore\ShooterCore.uplugin
  4. GameFeatureAction 实现:c:\Users\ChenChao\Documents\GitCode\LyraStarterGame_5.6\Source\LyraGame\GameFeatures\

通过理解 GameFeature 的加载流程,开发者可以更好地利用这一机制来扩展和定制 Lyra Starter Game 的功能。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/11 18:39:31

5步掌握MXNet图神经网络:智能推荐系统实战全解析

5步掌握MXNet图神经网络&#xff1a;智能推荐系统实战全解析 【免费下载链接】mxnet 项目地址: https://gitcode.com/gh_mirrors/mx/mxnet 还在为传统推荐算法的冷启动问题头疼吗&#xff1f;&#x1f914; 每天面对海量用户行为数据&#xff0c;却难以挖掘深层次的关联…

作者头像 李华
网站建设 2026/4/15 17:17:54

3D高斯渲染实战指南:从入门到精通的全流程解析

3D高斯渲染实战指南&#xff1a;从入门到精通的全流程解析 【免费下载链接】XV3DGS-UEPlugin 项目地址: https://gitcode.com/gh_mirrors/xv/XV3DGS-UEPlugin 在当今的3D渲染领域&#xff0c;3D高斯渲染技术正以其卓越的性能和逼真的效果引领着行业变革。这款基于前沿3…

作者头像 李华
网站建设 2026/4/15 17:03:36

5个关键步骤实现企业级PDF在线预览:vue-pdf深度技术解析

5个关键步骤实现企业级PDF在线预览&#xff1a;vue-pdf深度技术解析 【免费下载链接】vue-pdf PDF component for Vue 3 项目地址: https://gitcode.com/gh_mirrors/vue/vue-pdf 在现代企业数字化转型浪潮中&#xff0c;PDF文档的在线预览已成为提升工作效率的关键环节。…

作者头像 李华
网站建设 2026/4/15 6:17:43

CVAT企业级部署:从开源到商业化的智能升级之路

CVAT企业级部署&#xff1a;从开源到商业化的智能升级之路 【免费下载链接】cvat Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale. 项目地址: https://gitcode.com/Git…

作者头像 李华
网站建设 2026/4/15 13:31:56

16、利用Ansible Container构建、部署和优化多容器应用

利用Ansible Container构建、部署和优化多容器应用 构建django - gulp - nginx项目 在掌握了Ansible Container的高级语法后,我们就可以运用所学知识来构建和运行容器应用。由于容器应用是完整的Ansible Container项目,包含角色、 container.yml 文件及其他支持数据,所以…

作者头像 李华
网站建设 2026/4/13 10:26:50

揭秘CIPURSE:公共交通卡背后的安全密码 [特殊字符][特殊字符]

还在为手中的公交卡到底有多安全而好奇吗&#xff1f;&#x1f914; 今天我们就来聊聊CIPURSE这个专门为公共交通设计的安全协议&#xff0c;看看它如何保护你的每一次刷卡出行&#xff01; 【免费下载链接】proxmark3 Iceman Fork - Proxmark3 项目地址: https://gitcode.co…

作者头像 李华