概述
通用游戏系统(GGS)的交互系统仅提供代码,本节提供集成交互系统的指引。
- 适用场景:专为复杂、高级交互功能设计,不适合简单单机游戏需求(如“玩家叠加后触发事件”)。
- 用途:支持多人交互、动态 UI 构建及网络复制,适用于需要复杂交互逻辑的项目。
启用插件
交互系统依赖以下插件:
- GameplayAbilities:所有交互行为封装在 GameplayAbility 中。
- SmartObject:可交互物体为 SmartObject,通过其定义配置交互入口规则(提示、输入等)。
- GameplayBehavior:每个交互入口通过 GameplayBehavior 定义触发行为,GameplayAbility 通过其赋予并触发。
- GenericGameSystem:插件提供交互组件、候选/选项状态与交互生命周期;项目 Ability 或其他项目逻辑执行 Trace、Overlap 或 Targeting 搜索,再把结果传入组件。
前提:需对上述系统有基本了解。
配套项目中的交互资产
当前 GenericGame 项目的 InteractionCore 中有 GA_GGS_Interaction(交互 Ability 示例)、TP_QueryPotentialSmartObjects(Targeting Preset)和 WB_GGS_InteractionBox(交互提示 Widget)。下方 Blueprint 案例展示了项目如何通过 Targeting System 执行候选搜索,再把结果交给插件组件;这些 Blueprint 资产属于项目 Content,不在代码插件中。完整路径见配套项目内容与示例资产。
关系图
下图阐述交互系统、GameplayAbility、智能对象及 UI 之间的关系:
注意
别被吓到,困难的部分已经实现。经过设置后,你只需要关心如何配置具体的可交互Actor,以及通过GA编写具体的交互逻辑(用脚踢开门,或者用钥匙开门)。
交互系统组件
所有主动交互的玩家需在 Pawn 上添加 GGS_InteractionSystemComponent。
该组件功能:
- 维护潜在交互对象的引用、当前选中目标及交互对象总数,支持网络复制。
- 通过 DefaultRequestFilter 指定搜索的可交互对象类型(可选,视实现方式而定)。
- 仅维护状态,通过事件通知外部状态变化。
- 根据状态变化,通过交互接口通知当前可交互对象。
主交互技能
需创建继承自 GGS_GameplayAbility_Interaction 的 GameplayAbility。 该技能:
- 作为玩家、交互系统和 UI 之间的通信桥梁。
- ReplicationPolicy 设为 Replicate,支持 RPC 通信。
- 配套示例 Ability 可在服务端执行 Targeting 查询、将候选传入组件,并按权威规则处理交互;实际搜索实现属于该 Ability/项目逻辑。
- 客户端负责创建交互 UI 及与其通信。
案例:
Loading Blueprint
Initializing BlueprintUE renderer...
交互对象的搜索和选择
案例中使用 UE5 的 Gameplay Targeting System 搜索并排序目标,将结果 Actors 传递给交互系统组件。 其他方式:
- 基于玩家相机镜头选择。
- 由可交互 Actor 主动加入潜在交互列表。
构建 UI
最简单通用的方式是构建交互选项列表 UI,关键功能:
- 根据交互系统当前选中的交互对象选项列表,生成一组按钮。
- 根据智能对象槽是否可用,按钮相应禁用或隐藏。
- 按钮点击时通过 Index 通知交互技能以启动交互。
- 可通知交互系统在潜在交互对象间切换。
案例:
参考蓝图:
Loading Blueprint
Initializing BlueprintUE renderer...
刷新选项:
Loading Blueprint
Initializing BlueprintUE renderer...
此案例可在我的其他付费系统配套项目中找到。
可交互接口
若希望可交互 Actor 响应交互事件,可实现 GGS_InteractableInterface。 案例:通用库存系统中商人的交互接口实现。
Loading Blueprint
Initializing BlueprintUE renderer...