执行摘要
推荐用“一图、两产物、四绑定、七阶段、六门禁”管理 FlowCanvas。
FlowScript.asset 与 FlowScriptLocation.asset,服务端运行依赖导出的 JSON;两端通过配置表 skill 字段引用同一个 graphName。
项目实际配置链路
产物链路与运行链路必须一起验收。
七阶段配置框架
每一阶段都有明确输入、动作和完成标准。
明确挂载对象与执行归属
先确定流图属于副本、NPC、交互物还是 Trigger,再拆分客户端表现、服务端权威逻辑与双端衔接。
- 客户端:UI、镜头、剧情、动画、本地交互表现。
- 服务端:权威状态、实体控制、事件广播、副本推进。
- 跨端:必须定义谁先执行、何时等待、由哪条连接恢复。
创建 FlowScript 资产
Unity 中通过 Tools → 工具合集 → FlowCanvas 创建,资产必须位于 Assets/Bundles/FlowCanvasAsset/<分类>/。
命名门禁:asset 文件名 = graphName = JSON 文件名去后缀 = skill 值。
按五层结构搭图
入口层
Start、Listen、外部事件入口。
判断层
Condition、Check、Filter、Split。
数据层
Const、Blackboard、CVGroup、Object。
行为层
剧情、UI、动画、实体与副本动作。
收束层
等待、派发、ExecuteEnd、终止。
保存并维护客户端索引
保存 FlowScript 时更新 FlowScriptLocation.asset,客户端使用 graphName → assetPath 定位资源。重命名、移动、删除后要检查旧索引,因为当前实现只看到新增或更新,没有自动删除旧名称。
导出服务端 JSON
在 FlowCanvas 工具中选择资产并点击“导出Json”,输出到 D:\UGit\data_tables\datas\flowcanvas。导出内容包括 nodes、执行连接、数据连接和黑板默认值。
导出成功只代表导出器没有报告错误,不能替代节点注册、graphName、起点和运行时检查。
绑定源表并生成双端产物
在对应 Excel 的 skill 列填入 graphName,随后执行:
gen_server.bat 会复制 FlowCanvas JSON 到 output/flowcanvas。
启动加载与场景验收
客户端通过 NAsset 加载 FlowScript;服务端启动时扫描节点类型并加载运行目录的 flowcanvas。当前未找到正式热重载入口,因此可靠流程是重启服务、检查加载日志、进入目标场景验证。
四类配置绑定矩阵
源表字段均为 string、分组 c,s,但当前运行时覆盖并不完全一致。
| 挂载对象 | 源表 / 字段 | 示例 | 客户端 | 服务端 |
|---|---|---|---|---|
| 副本 | DungeonBase.xlsx · J · skill | fc_boss_baphomet | 依流图节点 | 自动挂载 DungeonEntity |
| NPC | Npc.xlsx · O · skill | NpcShop | TbNpc.Skill 加载 | 挂载语句已注释 |
| 交互物 | Component.xlsx · F · skill | inter_bafengte_enterdoor | TbComponent.Skill 加载 | LandPlayObject 挂载 |
| Trigger | Trigger.xlsx · D · skill | trigger_plot_quest1000101 | TbTrigger.Skill 加载 | 未找到对等自动挂载 |
六道验收门禁
可直接作为制作、自检和提测清单使用;勾选状态仅保存在当前页面会话。
当前工程静态风险
以下来自源代码与 data_tables/datas/flowcanvas,尚未通过运行时复现。
两个 JSON 使用同一 graphName
NpcShop.json 与 NpcShop2.json 的 graphName 都是 NpcShop。Loader 以 graphName 为 Map 键,后加载文件会覆盖先加载文件。
存在无节点流图
trigger_common_changeCameraandBack.json 的 nodes 为空,没有 StartNode。若被引用,流图不会产生预期行为。
15 个 JSON 命中未注册服务端节点名
集中为 ListenTriggerEvent、TaskStepCheckNode、GetCVGroupValueNode。服务端 Loader 对未知类型会降级为基础 FlowNode;是否为有意代理需逐类确认。
客户端与服务端的 1/2 枚举名称对调
导出端为 Client=0、ClientAndServer=1、Server=2;服务端为 Client=0、Server=1、ClientAndServer=2。当前主要按 0 与 >0 区分,但不应依赖 1/2 名称推导职责。
waitClient 未进入服务端执行判断
当前只发现该字段被导出、反序列化和深拷贝,没有发现执行分支使用。客户端等待/恢复必须用真实协议闭环验证。
NPC 服务端挂载代码被注释
服务端会读取 Npc.skill 并复制流图,但 npcEntity.addComponent(flowCanvasComponent) 当前为注释状态,NPC 服务端节点能力不能按“已接通”使用。
主要证据索引
点击链接可在允许 file:// 的本地浏览器中打开文件。