跳到主要内容

运行时概览

Guide

理解项目操作如何进入 GCSApi、转成战斗状态变化,再通过事件回到 UI 与表现系统

从项目操作到战斗反馈

上图展示了 GCS 的完整运行链路:项目通过 GCSApi 提交启动战斗、出牌、结束回合或奖励选择等操作,GameCardManager 将请求交给当前战斗,状态机负责推进流程,FlowGraph 执行器负责结算规则,状态改变后,事件和表现请求再把结果交给 UI、动画、VFX 与音频系统

这条链路只规定玩法状态和对外接口,不限制项目怎样设计战斗界面,你可以继续使用随包表现组件,也可以替换手牌、HUD、单位视图和奖励界面,而无需重写卡牌与状态规则

运行时组件的职责

组件主要职责项目代码是否需要直接依赖
GCSApi启动和控制战斗、读取状态、安全修改数据、订阅事件、查找内容是,它是项目代码的首选入口
GameCardManager保存当前启用的数据库、Run 数据与活动战斗场景必须存在;通常不直接调用
BattleStateMachine推进阶段、回合、敌人行动、等待、奖励与胜负流程否,通过 GCSApi 控制
BattleStateView保存当前战斗的单位、卡牌、牌堆、能量、状态和变量否,通过 GCSApi.Battle 或查询方法读取
GameCardFlowExecutor按连接关系执行 Card、Status 与 Enemy Behavior否,通过 FlowGraph 和执行上下文使用
GCSEvents将已经发生的运行时变化通知外部系统通过 GCSApi 的订阅方法使用

GameCardManager 是场景入口,场景中没有可用的 Manager 时,GCSApi.IsReadyfalse;查询方法会返回空集合、0falsenull,修改方法不会执行,初始化场景和配置数据库的操作见安装与初始化数据库管理

读取和修改同一份战斗状态

GCSApi.BattleGCSApi.Controller 访问的是同一场战斗,但权限不同

入口适用场景
GCSApi 查询方法读取阶段、回合、能量、单位、牌堆、状态、Intent 与等待状态
GCSApi.Battle读取 GCSApi 尚未提供具名方法的只读战斗信息
GCSApi 修改方法造成伤害、治疗、获得护甲、修改能量、操作状态或牌堆
GCSApi.Controller自定义节点或高级集成需要调用更完整的运行时修改能力

GCSApi.Battle 返回的集合和其中的 UnitStateCardInstance 仍然指向实时对象,并不是不可变快照,项目代码可以读取它们,但不应直接修改字段或集合

注意

不要直接赋值 UnitState.CurrentHp,也不要修改 CardPile.CardsUnitState.Statuses,这些写法会绕过 Hook、阶段检查、事件、Monitor 记录与 UI 刷新,运行时修改必须通过 GCSApi、受支持的 IBattleController 方法或内置 FlowGraph 节点完成

创作定义与运行实例的区别见定义与运行实例

FlowGraph 如何参与结算

Card、Status 和 Enemy Behavior 共用同一套 FlowGraph 执行规则,每次图开始执行时,运行时都会提供当前行为的来源、持有者、目标、卡牌、状态和战斗数据,因此同一个节点可以在不同内容中复用

节点职责可用能力
读取与计算通过 IEvaluationContext 读取上下文、端口输入、变量和前序节点结果
修改状态通过 IExecutionContext.Controller 调用受支持的战斗修改方法
控制流程使用分支、循环、Choice、Wait 与 Group 组织后续执行
发布结果把实际结算值写入输出端口,供后续逻辑和表现节点读取

普通用户只需要在 FlowGraph Editor 中连接节点,编写自定义节点时,再查阅执行上下文自定义节点

等待不会转移状态所有权

Choice、Wait 和 Animation Gate 可以推迟后续执行或阶段转换,但战斗状态仍由运行时维护

机制等待内容恢复条件
Choice当前 Flow 分支及待处理的阶段转换玩家选择、跳过,或系统因缺少 Presenter/候选项而走 Skipped 分支
秒数 Wait当前 Flow 的后续分支指定的实时秒数结束
Animation Wait当前 Flow 的后续分支同名 Gate holder 释放,或等待超时
Animation Gate状态机的阶段转换或敌人步骤表现组件成对调用 Acquire 与 Release
Reward Wait胜利后的最终结束通知玩家应用或跳过奖励

FX 节点不会自动等待动画、粒子或音频播放完成,需要严格控制顺序时,应在图中连接 Wait,或由表现协程持有 Animation Gate,节点参数见流程节点,对阶段推进的影响见战斗生命周期

事件和表现请求交付结果

运行时事件用于通知外部系统“某项变化已经发生”,UI 收到事件后,应重新读取 GCSApi 的当前状态,而不是把事件参数长期保存为自己的战斗副本

提示

表现请求负责播放浮动文本、单位动画、VFX、SFX 或镜头效果,它们反映已经结算的玩法结果,不拥有 HP、状态、牌堆或阶段数据,缺少可选表现资源时,玩法仍会继续结算

事件订阅和 UI 刷新方式见事件使用指南自定义 UI 接入

按任务选择文档入口

任务继续阅读
理解定义、实例与安全修改边界定义与运行实例
查找阶段、回合和奖励的精确顺序战斗生命周期
理解手牌、抽牌堆、弃牌堆和消耗堆卡牌与牌堆生命周期
理解状态施加、Hook、衰减与过期状态生命周期
接入 UI、动画、VFX、音频和 Gate自定义 UI 接入FX 节点流程节点
编写战斗控制代码API 使用指南
查找完整成员和事件参数API 参考事件参考