总览
Game Features 不只是给 Actor 加组件。UE5.8 的 GameFeatures 插件还提供地图内容、数据注册、作弊扩展、Chunk 覆盖、Iris 网络过滤等 Action。这些 Action 适合把“某玩法包带来的额外世界内容和数据规则”做成可插拔模块。
DataRegistry 和 DataRegistrySource
| Action | 适合 |
|---|---|
DataRegistry | 启用/停用一个完整 DataRegistry 资产 |
DataRegistrySource | 给已有 Registry 添加 DataTable 或 CurveTable 来源 |
活动奖励表、武器数值表、敌人掉落表,很适合用 DataRegistrySource。插件激活时注册表来源,停用时 unregister。源码里如果 Registry 已初始化但资源没提前加载,会记录可能 hitch 的日志,这也是提醒你要做预加载。
World Partition 内容
AddWorldPartitionContent 和 AddWPContent 面向 World Partition 或 Content Bundle。适合:
- 活动岛屿
- 临时副本入口
- 赛季建筑
- 教程区域
- 节日装饰
这类内容不要硬放主地图常驻。用 Game Feature 激活时加入,停用时撤掉,设计上更接近运营内容包。
AddCheats
AddCheats 给 UCheatManager 添加 UCheatManagerExtension。适合测试工具:
Cheat.GiveSeasonCurrency 100
Cheat.ToggleRifleSpread
Cheat.SpawnEventBoss
生产项目建议只在非 Shipping 或内部构建启用。不要把运营后台能力做成裸 Cheat。
AddChunkOverride
Chunk Override 用于影响资源分块。适合你需要把某些资产强制打到某个 Chunk 或 DLC 包里。它是打包分发层面的工具,不是运行时 gameplay 开关。
Iris Filter
UIrisFilterGameFeatureAction 可以创建 Iris 网络过滤器。它适合高级多人项目:某个玩法包激活后,增加新的网络对象过滤规则。新手不用一上来就用,但需要知道 Game Features 可以延伸到网络复制策略。
使用案例:赛季地图内容包
赛季包可以由这些 Action 组成:
| 模块 | Action |
|---|---|
| 地图里新增活动场地 | AddWorldPartitionContent |
| 活动任务/奖励表 | DataRegistrySource |
| 内部测试命令 | AddCheats |
| 活动资源独立分块 | AddChunkOverride |
| 活动 Boss 特殊复制过滤 | Iris Filter |
这样赛季结束后,可以停用内容、撤掉数据源、清掉测试命令,并在下个版本移除 Chunk。
架构分析
这些 Action 都有一个共同点:它们改变的是“项目外围系统”,不是某个 Actor。DataRegistry 改数据发现,World Partition 改世界内容,Chunk 改分发,Iris 改网络过滤,Cheats 改调试入口。因此更要严格区分 Registering/Activating 和 Deactivating/Unregistering。注册期可以做编辑器预览和路径登记,激活期才真正影响运行时。
常见坑
- DataRegistrySource 指向空表或错误表类型,运行时才发现。
- 活动地图内容引用主地图私有对象,单独分发失败。
- Cheat 扩展没有构建开关,Shipping 里暴露内部命令。
- Chunk Override 只在编辑器测试,没在实际 Cook 产物里检查。
- Iris Filter 激活后没考虑已有连接和已有对象的过滤状态。
源码依据
GameFeatureAction_DataRegistry 和 GameFeatureAction_DataRegistrySource 调用 UDataRegistrySubsystem 注册/忽略 Registry 或数据源。GameFeatureAction_AddWorldPartitionContent 接入 External Data Layer 或 Content Bundle。GameFeatureAction_AddCheats 创建 UCheatManagerExtension 并添加到 CheatManager。IrisFilterGameFeatureAction 位于 GameFeatures/Public,DisplayName 为 Create Iris Network Filter。
源码路径索引
GameFeatures/Public/GameFeatureAction_AddWorldPartitionContent.hGameFeatures/Public/GameFeatureAction_AddWPContent.hGameFeatures/Public/GameFeatureAction_DataRegistry.hGameFeatures/Public/GameFeatureAction_DataRegistrySource.hGameFeatures/Public/GameFeatureAction_AddCheats.hGameFeatures/Public/GameFeatureAction_AddChunkOverride.hGameFeatures/Public/IrisFilterGameFeatureAction.h