UE5.8 Game Features 喂饭级专题

UE5.8 Game Features 与 Modular Gameplay 喂饭级入门到实战专题

基于 UE5.8 GameFeatures、ModularGameplay、AbilitySystemGameFeatureActions 和 Lyra 源码,从插件化玩法、运行时启停、组件注入、初始化状态、输入/UI/GAS 注入、资源 Cook/DLC、调试和生产规范讲到真实项目怎么落地。

总览

Game Features 不是“再写一种插件”。普通 UE 插件解决的是模块、内容和依赖;Game Features 解决的是一个玩法包能不能被发现、注册、加载、激活、停用、卸载、回滚。Modular Gameplay 则解决另一个问题:玩法包激活后,怎么把组件、输入、UI、技能、数据表挂到已经存在的 PlayerController、Pawn、PlayerState、GameState 上,而不是改一堆基类。

一句话心智模型:Game Features 管包的生命周期,UGameFeatureData 管这个包激活时要做哪些事,UGameFeatureAction 执行这些事,UGameFrameworkComponentManager 把组件和扩展事件投递给愿意被扩展的 Actor。

运行时总入口是 UGameFeaturesSubsystem。项目代码、控制台命令和默认 Project Policy 最终都会通过它找到插件 URL、创建状态机、推进 Registered/Loaded/Active 等目标状态。

UE5.8 Game Features 与 Modular Gameplay 喂饭级入门到实战专题 配图
Game Features 负责“玩法包什么时候加载和激活”,Modular Gameplay 负责“激活后怎样把能力挂到现有 Actor 身上”。

专题分篇目录

篇章你会学到什么读完能做什么
先做一个可开关的武器包插件建 Game Feature 插件,配置 GameFeatureData,用控制台加载和停用
.uplugin、GameFeatureData 与目录结构明白 BuiltInInitialFeatureState、Actions、PrimaryAssetTypesToScan 和依赖边界
状态机、URL 与运行时启停用 Subsystem API/控制台命令管理 Installed、Registered、Loaded、Active
GameFeatureAction 家族怎么选会选 AddComponents、DataRegistry、WPContent、Cheats、Chunk、Iris 等动作
Add Components 与 Actor 扩展让 Pawn/Controller/State 被玩法包动态加组件
Init State 初始化状态链用 GameplayTag 状态让组件按顺序准备好,避免 BeginPlay 互相抢
像 Lyra 一样注入输入、UI 和 GAS把 Enhanced Input、Common UI、AbilitySet 做成可插拔玩法
资源扫描、AssetBundle、Cook 和 DLC管理 Primary Asset、Client/Server Bundle、软引用和打包边界
World Partition、DataRegistry、Iris 与其它扩展给地图内容、数据表、网络过滤、调试作弊做模块化接入
自定义 GameFeatureAction写自己的动作,处理激活/停用、World、异步和清理
十一调试、多人、回滚和生产规范用命令、日志、Dump 和检查清单把模块化玩法安全上线

它适合解决什么问题

适合:赛季玩法、武器包、地图包、活动模式、角色职业、技能包、教程系统、运营热修补、内部测试菜单、DLC 内容、平台差异功能。它们有共同特点:不是所有场景都需要、生命周期独立、资源边界清楚、希望能停用或回滚。

不适合:角色移动、全局存档、基础网络协议、核心输入抽象、全项目都永远依赖的框架。那些更适合普通模块或主工程代码。

UE5.8 里的真实构成

插件UE5.8 状态负责什么
GameFeaturesRuntime,PreDefault,Beta,默认不启用GFP 状态机、GameFeatureData、Action、Project Policy、控制台命令
ModularGameplayRuntime,PreDefault,Beta,默认不启用Component Manager、Receiver、Extension Event、Init State
AbilitySystemGameFeatureActionsRuntime,Beta,默认不启用给 GAS Attribute Defaults 做 Game Feature Action
Lyra 自带 Actions示例项目代码AddAbilities、AddInputContextMapping、AddWidget、WorldActionBase 等项目级扩展

推荐项目骨架

Plugins/GameFeatures/WeaponPack_Rifle/
  WeaponPack_Rifle.uplugin
  Config/
  Content/
    DA_GameFeatureData_Rifle
    Weapons/
    Input/
    UI/
    Abilities/
  Source/
    WeaponPack_RifleRuntime/

项目主工程里保留基础角色、基础 Controller、基础 ASC、基础 UI Layer、基础 Asset Manager 配置。具体步枪玩法、榴弹玩法、节日活动玩法进入 Game Feature 插件。这样一个玩法能像“包”一样激活,也能在失败时拆回去。

源码依据

GameFeatures.uplugin 描述它是 modular Game Feature Plugins 的支持插件,依赖 ModularGameplay 和 DataRegistry。UGameFeatureData 继承 UPrimaryDataAsset,包含 ActionsPrimaryAssetTypesToScanUGameFeatureAction 定义 Registering、Loading、Activating、Activated、Deactivating、Unloading、Unregistering 等回调。UGameFrameworkComponentManagerUGameInstanceSubsystem,负责给 opt-in 的 Actor 自动挂组件和发送扩展事件。

常见坑

  • 以为 Game Feature 会魔法般改所有 Actor;实际上 Actor 必须通过 Receiver 或项目约定主动接入。
  • 把核心系统拆成 Game Feature,结果主工程启动顺序被玩法包绑死。
  • 只写激活逻辑,不写停用清理,热切换一次后留下输入、UI、Ability 或组件残留。
  • 把 Lyra 的项目级 Action 当成引擎内置功能;Lyra 很有参考价值,但很多 Action 是示例项目自己写的。
  • 忘记 Client/Server 资源和组件差异,Dedicated Server 加载了纯 UI 资源。

源码路径索引

  • Engine/Plugins/Runtime/GameFeatures/GameFeatures.uplugin
  • Engine/Plugins/Runtime/GameFeatures/Source/GameFeatures/Public/GameFeatureData.h
  • Engine/Plugins/Runtime/GameFeatures/Source/GameFeatures/Public/GameFeatureAction.h
  • Engine/Plugins/Runtime/GameFeatures/Source/GameFeatures/Public/GameFeaturesSubsystem.h
  • Engine/Plugins/Runtime/GameFeatures/Source/GameFeatures/Private/GameFeaturePluginStateMachine.h
  • Engine/Plugins/Runtime/ModularGameplay/Source/ModularGameplay/Public/Components/GameFrameworkComponentManager.h
  • Samples/Games/Lyra/Plugins/GameFeatures/ShooterCore/ShooterCore.uplugin