GES 集成
从 FlowGraph 触发 GES 事件,或让 GES 事件启动 Behavior 入口,同时保留 GCS 自己的事件通道
集成边界与双向通道
上图展示了 GCS 与 GES 之间的两条显式通道,Raise GES Event 与 Encounter Bootstrap 把战斗时机送入 GES,On GES Event 则让外部事件启动指定 Behavior,未配置这些入口的 GCS 事件不会自动跨系统转发
43 个内置 GCS 事件始终使用内部通道,只有显式配置的 FlowGraph 节点与 Encounter Bootstrap 事件会跨到 GES
检测与安装
集成要求同一个 Unity 项目中存在 Game Event System,GCS 的编辑器检测器会查找名为 TinyGiants.GES.Runtime 的 Assembly Definition,并在 Standalone、Android、iOS、WebGL 及当前活动的 Build Target Group 上同步 TG_GES_INSTALLED Scripting Define Symbol
完成以下步骤后,检测器会自动启用集成:
- 导入 GES,项目已经安装时无需重复操作
- 等待 Unity 完成编译和 Domain Reload
- 检测器找到
TinyGiants.GES.Runtime,加上TG_GES_INSTALLED Raise GES Event和On GES Event两个节点就绪,Encounter Bootstrap 中也会显示Use GES Events
移除 GES 后,检测器会清除对应 Define,GCS 随即退回内部事件通道
从 Encounter Bootstrap 触发事件
选择场景里的 GameCardEncounterBootstrap 并展开 Events,可以看到参数 Use GES Events 是默认关闭的,因此已有场景会直接使用 On Bootstrap UnityEvent,当开启 Use GES Events 后,UnityEvent 会被 On Bootstrap Events 列表替代
当遭遇战启动后,Bootstrap 会从上到下触发列表中的全部事件,但这两种模式是互斥的,GES 模式不会调用 UnityEvent,UnityEvent 模式也不会触发 GES 列表
从 GCS 触发 GES 事件
在 FlowGraph 中需要通知其他项目系统的位置加入 Raise GES Event,该节点位于 Add Node 菜单的 Event 分类,安装 GES 后,节点上的 GES Event 字段会显示事件选择器,列表按事件数据库分组,选中事件时会同时填入 Argument 与 Sender 类型,无需手写 GUID 或类型名
节点支持无参数事件、单 Argument 事件 和 Sender Argument 事件,参数值可以来自固定值、Unity Object、结构化数据或当前执行上下文,所有内容都通过节点上可见的 Picker 与 Source 字段配置
配置序列化字段、动态选项、上下文来源和 Primitive 类型边界时,直接查看 Raise GES Event 节点手册
用 GES 事件启动 Behavior
On GES Event 入口(Entry 分类)让图在战斗期间响应某个 GES 事件的触发,事件同样在节点上用选择器挑
战斗开始时,GCS 会绑定当时处于激活状态的每个 GES 事件,战斗中途才激活的事件需要等到下一场战斗才会生效,此后,被选中事件的任意一次触发都会启动匹配入口,作用范围包括:
-
当前位于抽牌堆、手牌、弃牌堆或消耗堆的卡牌
-
存活单位身上的状态
-
存活敌人的 Behavior
三种 GES 事件形态,即无参数、单 Argument、Sender 加 Argument 都受支持,GES 的 Payload 本身不会传入 FlowGraph,入口触发后,Behavior 仍然从当前战斗状态读取所需数据
FlowGraph 校验器会标出没选事件的 On GES Event 入口,避免空引用进入成品图
没有 GES 时的行为
GCS 照常编译运行,所有内置事件照常工作,图走到 Raise GES Event 节点也不会崩溃,内部通道会记一条 warning:
[GCSEventChannelInternal] RaiseGesEvent('...') ignored: GES integration not installed.
这样可以让共享卡牌与测试内容继续用于未安装 GES 的项目,同时由 Console 明确记录被忽略的调用,便于定位缺失集成
保持系统职责边界
-
跨系统时机适合交给 Bridge,例如 Boss 死亡后解锁成就、打出特定卡牌后推进任务、胜利后通知局外成长系统、上报分析里程碑,或者驱动已经监听 GES 的场景对象
-
伤害、治疗、状态、卡牌移动、能量、目标选择与其他战斗规则仍应保留在 GCS 中,让一张卡牌只看自己的 FlowGraph 就能理解,Bridge 只承担系统交接,不作为第二套卡牌行为层
故障排查
| 症状 | 检查项 |
|---|---|
Raise GES Event 报集成未安装 | 确认项目里有 GES 且 TinyGiants.GES.Runtime 存在,然后让 Unity reload 以更新 TG_GES_INSTALLED |
Warning:GameEventManager not found in scene | 在战斗触发事件之前,把 GES manager 加进场景或完成初始化 |
| Warning:GES 事件 GUID 找不到 | 在节点上重选事件;保存的 GUID 已对不上任何现存 GES 事件 |
| Argument 收到 null | Argument 类型必须能解析,所选来源必须能产出该类型的值,重选事件会重新填好类型 |
| Sender 感知事件只带 argument 触发 | 目标 GES 事件类型没有匹配的 sender 加 argument 触发方法,bridge 走了回退 |
On GES Event 从不触发 | 节点上必须选好事件,事件在战斗开始时必须处于激活状态,且它所属的卡牌、状态或敌人在触发那一刻要在牌堆里或存活 |
| GCS 事件正常,GES 监听器无响应 | Bridge 只转发显式的 Raise GES Event 调用,不会把内置 GCS 事件镜像进 GES |