学建设网站,手机微信打开文件是乱码,php微网站开发,网站地图在线制作工具Lyra Starter Game 中 GameFeature 类#xff08;如 ShooterCore#xff09;的加载流程
1. GameFeature 系统概述
GameFeature 是 Unreal Engine 5 的一个核心插件系统#xff0c;用于模块化地扩展游戏功能。在 Lyra Starter Game 中#xff0c;ShooterCore 是一个典型的 G…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,CategoryGame Feature | Actions)TArrayTObjectPtrUGameFeatureActionActions;// 需要扫描的主资产类型UPROPERTY(EditAnywhere,CategoryGame Feature | Asset Manager)TArrayFPrimaryAssetTypeInfoPrimaryAssetTypesToScan;};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 插件注册阶段插件发现引擎启动时会扫描所有已启用的 GameFeature 插件GameFeatureData 加载为每个 GameFeature 插件加载其 GameFeatureData 配置文件如 ShooterCore.uasset观察者通知调用所有观察者的OnGameFeatureRegistering方法Lyra 项目中ULyraGameFeature_AddGameplayCuePaths是一个观察者用于在注册阶段添加 GameplayCue 路径// 定义在 LyraGameFeaturePolicy.cppvoidULyraGameFeature_AddGameplayCuePaths::OnGameFeatureRegistering(constUGameFeatureData*GameFeatureData,constFStringPluginName,constFStringPluginURL){for(constUGameFeatureAction*Action:GameFeatureData-GetActions()){if(constUGameFeatureAction_AddGameplayCuePath*AddGameplayCueGFACastUGameFeatureAction_AddGameplayCuePath(Action)){// 添加 GameplayCue 路径constTArrayFDirectoryPathDirsToAddAddGameplayCueGFA-GetDirectoryPathsToAdd();if(ULyraGameplayCueManager*GCMULyraGameplayCueManager::Get()){for(constFDirectoryPathDirectory:DirsToAdd){FString MutablePathDirectory.Path;UGameFeaturesSubsystem::FixPluginPackagePath(MutablePath,PluginRootPath,false);GCM-AddGameplayCueNotifyPath(MutablePath,false);}// 重新构建运行时库GCM-InitializeRuntimeObjectLibrary();}}}}4.2 插件加载阶段依赖检查检查插件的依赖是否已满足资源预加载根据 GameFeatureData 配置预加载所需资源观察者通知调用所有观察者的OnGameFeatureLoading方法Lyra 项目中ULyraGameFeature_HotfixManager是一个观察者用于在加载阶段处理热修复// 定义在 LyraGameFeaturePolicy.cppvoidULyraGameFeature_HotfixManager::OnGameFeatureLoading(constUGameFeatureData*GameFeatureData,constFStringPluginURL){if(ULyraHotfixManager*HotfixManagerCastULyraHotfixManager(UOnlineHotfixManager::Get(nullptr))){HotfixManager-RequestPatchAssetsFromIniFiles();}}4.3 插件激活阶段Action 激活遍历 GameFeatureData 中的所有 GameFeatureAction调用它们的OnGameFeatureActivating方法世界集成将 GameFeature 集成到当前游戏世界中观察者通知调用所有观察者的OnGameFeatureActivating方法以GameFeatureAction_AddAbilities为例它会在激活时为指定的 Actor 类添加能力// 定义在 GameFeatureAction_AddAbilities.cppvoidUGameFeatureAction_AddAbilities::OnGameFeatureActivating(FGameFeatureActivatingContextContext){FPerContextDataActiveDataContextData.FindOrAdd(Context);if(!ensureAlways(ActiveData.ActiveExtensions.IsEmpty())||!ensureAlways(ActiveData.ComponentRequests.IsEmpty())){Reset(ActiveData);}Super::OnGameFeatureActivating(Context);}4.4 插件运行阶段GameFeature 激活后其定义的功能如能力、输入、UI 等将在游戏中生效。4.5 插件停用阶段Action 停用遍历 GameFeatureData 中的所有 GameFeatureAction调用它们的OnGameFeatureDeactivating方法资源清理清理 GameFeature 使用的资源观察者通知调用所有观察者的OnGameFeatureDeactivating方法4.6 插件卸载阶段资源卸载卸载 GameFeature 使用的资源插件移除从系统中移除 GameFeature观察者通知调用所有观察者的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,ConfigGame)classULyraGameFeaturePolicy:publicUGameFeaturesProjectPolicies{GENERATED_BODY()public:// 获取单例实例staticULyraGameFeaturePolicyGet();// 初始化游戏特性管理器virtualvoidInitGameFeatureManager()override;// 关闭游戏特性管理器virtualvoidShutdownGameFeatureManager()override;// 获取游戏特性加载模式virtualvoidGetGameFeatureLoadingMode(boolbLoadClientData,boolbLoadServerData)constoverride;};7. 总结GameFeature 是 Lyra Starter Game 中实现模块化功能扩展的核心机制ShooterCore 作为一个典型的 GameFeature 插件其加载流程遵循了 Unreal Engine 5 的 GameFeature 生命周期注册阶段发现插件并加载 GameFeatureData加载阶段检查依赖并预加载资源激活阶段执行 GameFeatureAction 并集成到游戏世界运行阶段功能生效停用阶段清理资源和功能卸载阶段移除插件通过这种模块化的设计Lyra Starter Game 可以灵活地扩展和管理游戏功能提高代码的可维护性和复用性。关键文件路径GameFeature 核心定义C:\UnrealEngine-5.6.1-release\Engine\Plugins\Runtime\GameFeatures\Source\GameFeatures\Public\GameFeatureData.hLyra GameFeature 策略c:\Users\ChenChao\Documents\GitCode\LyraStarterGame_5.6\Source\LyraGame\GameFeatures\LyraGameFeaturePolicy.hShooterCore 插件描述c:\Users\ChenChao\Documents\GitCode\LyraStarterGame_5.6\Plugins\GameFeatures\ShooterCore\ShooterCore.upluginGameFeatureAction 实现c:\Users\ChenChao\Documents\GitCode\LyraStarterGame_5.6\Source\LyraGame\GameFeatures\通过理解 GameFeature 的加载流程开发者可以更好地利用这一机制来扩展和定制 Lyra Starter Game 的功能。