当前位置: 首页 > news >正文

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 的功能。

http://www.jsqmd.com/news/91609/

相关文章:

  • SymPy特殊函数库完全指南:从入门到精通的核心技巧
  • 水下3D重建终极解决方案:从模糊到清晰的完整指南
  • FunASR语音识别系统:构建智能会议记录的完整指南 [特殊字符]
  • 百度网盘加速终极指南:完整解决方案深度解析
  • 腾讯混元4B开源:256K超长上下文重塑企业级AI应用格局
  • 3B参数+4bit量化:IBM Granite 4.0 Micro如何重塑企业级AI部署范式
  • Termshark终极指南:5个简单步骤掌握终端网络分析
  • 7亿参数改写边缘AI规则:LFM2-700M如何重新定义终端智能
  • 2025年宁波刑事律师推荐排行榜单 - 2025年11月品牌推荐榜
  • 本地PDF工具箱:5个实用场景解锁Stirling-PDF完整能力
  • React Native相机开发终极指南:3小时从入门到图像识别实战
  • React Diff View 终极教程:快速掌握代码差异显示组件
  • 玩转Gazebo仿真:从零搭建你的虚拟机器人实验室
  • DuckDB空间扩展终极指南:告别PostGIS依赖的轻量级GIS解决方案
  • 2025年热门的铁艺护栏高评价厂家推荐榜 - 行业平台推荐
  • 终极指南:快速上手react-diff-view组件安装
  • 3大实战场景揭秘:为什么Lovász-Softmax是分割任务的终极选择
  • Wan2.2-Animate-14B:单图驱动动画的智能革命
  • Holo1.5开源:UI交互精度提升10%,重新定义AI代理操作能力
  • 9GB显存挑战GPT-4V:MiniCPM-Llama3-V 2.5-int4开启端侧多模态新纪元
  • BewlyBewly:重新定义你的B站视觉体验
  • Steam游戏数据获取终极指南:5步轻松掌握GetDataFromSteam-SteamDB完整使用教程
  • 稳部落:微博数据备份终极解决方案与完整使用指南
  • 2025年知名的铝艺电动门/铝艺门厂家实力及用户口碑排行榜 - 行业平台推荐
  • 解密Prompt系列66. 视觉Token爆炸→DeepSeek-OCR光学压缩
  • 2025年比较好的扫地机功能五金厂家最新实力排行 - 行业平台推荐
  • 2025年比较好的梳妆台智能五金厂家推荐及采购参考 - 行业平台推荐
  • 辅助销售智能体的推荐系统落地三个阶段
  • 2025年质量好的6082铝板/铝板厂家推荐及采购指南 - 行业平台推荐
  • FunASR智能会议记录系统:告别繁琐,拥抱高效