GES 集成
将 GCS 战斗事件发送到 GES,或通过 GES 事件触发 Behavior,保留 GCS 内部订阅
集成边界与双向通道
上图展示了 GCS 与 GES 的双向事件连接,已映射的 GCS 事件、Raise GES Event 与 Encounter Bootstrap 向 GES 发送通知,On GES Event 接收 GES 事件并触发 Behavior,可按所需时机选择内置事件或手动配置节点
GCS 先通知内部订阅者,再按映射触发对应的 GES 事件,带参数事件会传递原始载荷,缺少映射时仍会通知内部订阅者
检测与安装
- 在同一个 Unity 项目中导入 GES,等待编译和 Domain Reload
- 打开 Game Card System 面板,在 GES Event Bridge 中点击 Initialize GES Events
- 等待事件类型生成与 Unity 编译,确认显示 48 / 48 Events Synced,已有映射异常时点击 Repair GES Events
同步会把 GCS Runtime Events 数据库注册到当前场景的 GameEventManager,并为 48 个内置事件生成名称、类型与 GES GUID 的映射,保存场景以保留数据库注册
GCS 检测到 TinyGiants.GES.Runtime 后,会为 Standalone、Android、iOS、WebGL 及当前 Build Target Group 设置 TG_GES_INSTALLED,编译完成后可添加 Raise GES Event 与 On GES Event,Encounter Bootstrap 中也会显示 Use GES Events
移除 GES 后,检测器会清除对应 Define,GCS 随即退回内部事件通道
从 Encounter Bootstrap 触发事件
选择场景中的 GameCardEncounterBootstrap 并展开 Events,默认通过 On Bootstrap UnityEvent 通知战斗启动,启用 Use GES Events 后,改用 On Bootstrap Events 列表
遭遇战启动后,Bootstrap 只执行所选模式的回调,GES 模式按列表顺序触发
从 GCS 触发 GES 事件
从 Add Node 菜单的 Event 分类添加 Raise GES Event,在 GES Event 字段中选择事件,选择器按数据库分组,并自动填入 Argument 与 Sender 类型
节点支持无参数、单 Argument 与 Sender Argument 事件,通过 Picker 和 Source 字段指定固定值、Unity Object、结构化数据或当前执行上下文
字段、动态选项、上下文来源与 Primitive 类型限制见 Raise GES Event 节点手册
用 GES 事件启动 Behavior
从 Entry 分类添加 On GES Event,在节点上选好要监听的事件,GCS 会在战斗开始时绑定已激活的 GES 事件,战斗中途才激活的事件要到下一场战斗生效,已绑定的事件触发时,GCS 会执行以下对象中匹配入口所连接的 Behavior
-
当前位于抽牌堆、手牌、弃牌堆或消耗堆的卡牌
-
存活单位身上的状态
-
存活敌人的 Behavior
入口支持无参数、单 Argument 与 Sender Argument 事件,GES Payload 不会传入 FlowGraph,Behavior 从当前战斗状态读取数据
On GES Event 未选择事件时,FlowGraph 校验器会报告空引用
没有 GES 时的行为
未安装 GES 时,GCS 可正常编译运行,内置事件使用内部通道,执行 Raise GES Event 时忽略调用,并在 Console 输出警告
[GCSEventChannelInternal] RaiseGesEvent('...') ignored: GES integration not installed.
包含该节点的卡牌仍可在未安装 GES 的项目中使用,Console 警告用于定位未执行的跨系统通知
保持系统职责边界
-
通过 GES 通知成就、任务、局外成长、数据统计或场景对象,例如 Boss 死亡后解锁成就,或战斗胜利后更新成长数据
-
在 GCS 中处理伤害、治疗、状态、卡牌移动、能量与目标选择,使战斗规则保留在卡牌 FlowGraph 中
故障排查
| 症状 | 检查项 |
|---|---|
Raise GES Event 报集成未安装 | 确认项目里有 GES 且 TinyGiants.GES.Runtime 存在,然后让 Unity reload 以更新 TG_GES_INSTALLED |
Warning:GameEventManager not found in scene | 在战斗触发事件之前,把 GES manager 加进场景或完成初始化 |
| Warning:GES 事件 GUID 找不到 | 在节点上重选事件,保存的 GUID 已不对应现有事件 |
| Argument 收到 null | Argument 类型必须能解析,所选来源必须能产出该类型的值,重选事件会重新填好类型 |
| GES 事件拒绝 Sender 或 Argument | 所选来源的值需要符合事件的参数类型,检查 Console 中的类型警告并重选事件 |
On GES Event 从不触发 | 节点上必须选好事件,事件在战斗开始时必须处于激活状态,且它所属的卡牌、状态或敌人在触发那一刻要在牌堆里或存活 |
| GCS 事件正常,GES 监听器无响应 | 确认 GES Event Bridge 已同步 48 项映射,并检查当前场景的 GameEventManager 是否注册 GCS Runtime Events |