INF Project · Configuration Study

FlowCanvas 配置流程调研报告

基于客户端编辑器、导出器、四张源配置表、服务端加载与 ECS 执行链路整理。报告区分工程事实、静态检查结果和待运行时验证项。

项目根目录:D:\UGit 报告日期:2026-08-24 证据级别:源码与源配置静态检查 未执行:Unity / 容器运行验证
1

执行摘要

推荐用“一图、两产物、四绑定、七阶段、六门禁”管理 FlowCanvas。

1一张 FlowScript 逻辑图
2客户端 .asset 与服务端 .json
4副本、NPC、交互物、Trigger 绑定
7从职责划分到运行验收
6当前高价值静态风险
核心结论:FlowCanvas 不是单一 JSON 配置。客户端运行依赖 Unity 的 FlowScript.assetFlowScriptLocation.asset,服务端运行依赖导出的 JSON;两端通过配置表 skill 字段引用同一个 graphName
2

项目实际配置链路

产物链路与运行链路必须一起验收。

职责设计对象、事件、条件、执行端
FlowScript.assetUnity 可视化图资产
保存索引FlowScriptLocation.asset
导出 JSONdatas/flowcanvas
配置绑定Excel 的 skill 字段
检查与生成check / client / server
运行加载NAsset / FlowCanvasLoader
场景验收ECS 每帧执行与双端闭环
3

七阶段配置框架

每一阶段都有明确输入、动作和完成标准。

明确挂载对象与执行归属

先确定流图属于副本、NPC、交互物还是 Trigger,再拆分客户端表现、服务端权威逻辑与双端衔接。

  • 客户端:UI、镜头、剧情、动画、本地交互表现。
  • 服务端:权威状态、实体控制、事件广播、副本推进。
  • 跨端:必须定义谁先执行、何时等待、由哪条连接恢复。

创建 FlowScript 资产

Unity 中通过 Tools → 工具合集 → FlowCanvas 创建,资产必须位于 Assets/Bundles/FlowCanvasAsset/<分类>/

命名门禁:asset 文件名 = graphName = JSON 文件名去后缀 = skill 值

按五层结构搭图

ENTRY

入口层

Start、Listen、外部事件入口。

DECISION

判断层

Condition、Check、Filter、Split。

DATA

数据层

Const、Blackboard、CVGroup、Object。

ACTION

行为层

剧情、UI、动画、实体与副本动作。

EXIT

收束层

等待、派发、ExecuteEnd、终止。

保存并维护客户端索引

保存 FlowScript 时更新 FlowScriptLocation.asset,客户端使用 graphName → assetPath 定位资源。重命名、移动、删除后要检查旧索引,因为当前实现只看到新增或更新,没有自动删除旧名称。

导出服务端 JSON

在 FlowCanvas 工具中选择资产并点击“导出Json”,输出到 D:\UGit\data_tables\datas\flowcanvas。导出内容包括 nodes、执行连接、数据连接和黑板默认值。

导出成功只代表导出器没有报告错误,不能替代节点注册、graphName、起点和运行时检查。

绑定源表并生成双端产物

在对应 Excel 的 skill 列填入 graphName,随后执行:

cd D:\UGit\data_tables .\bin\check.bat .\bin\gen_client.bat .\bin\gen_server.bat

gen_server.bat 会复制 FlowCanvas JSON 到 output/flowcanvas

启动加载与场景验收

客户端通过 NAsset 加载 FlowScript;服务端启动时扫描节点类型并加载运行目录的 flowcanvas。当前未找到正式热重载入口,因此可靠流程是重启服务、检查加载日志、进入目标场景验证。

4

四类配置绑定矩阵

源表字段均为 string、分组 c,s,但当前运行时覆盖并不完全一致。

挂载对象源表 / 字段示例客户端服务端
副本DungeonBase.xlsx · J · skillfc_boss_baphomet依流图节点自动挂载 DungeonEntity
NPCNpc.xlsx · O · skillNpcShopTbNpc.Skill 加载挂载语句已注释
交互物Component.xlsx · F · skillinter_bafengte_enterdoorTbComponent.Skill 加载LandPlayObject 挂载
TriggerTrigger.xlsx · D · skilltrigger_plot_quest1000101TbTrigger.Skill 加载未找到对等自动挂载
5

六道验收门禁

可直接作为制作、自检和提测清单使用;勾选状态仅保存在当前页面会话。

额外限制:服务端立即传播深度达到 20 会中止;应避免超长同步链、无出口循环和数据环形引用。
6

当前工程静态风险

以下来自源代码与 data_tables/datas/flowcanvas,尚未通过运行时复现。

HIGH · 名称覆盖

两个 JSON 使用同一 graphName

NpcShop.jsonNpcShop2.json 的 graphName 都是 NpcShop。Loader 以 graphName 为 Map 键,后加载文件会覆盖先加载文件。

HIGH · 空配置

存在无节点流图

trigger_common_changeCameraandBack.json 的 nodes 为空,没有 StartNode。若被引用,流图不会产生预期行为。

HIGH · 节点协议

15 个 JSON 命中未注册服务端节点名

集中为 ListenTriggerEventTaskStepCheckNodeGetCVGroupValueNode。服务端 Loader 对未知类型会降级为基础 FlowNode;是否为有意代理需逐类确认。

MEDIUM · 枚举契约

客户端与服务端的 1/2 枚举名称对调

导出端为 Client=0、ClientAndServer=1、Server=2;服务端为 Client=0、Server=1、ClientAndServer=2。当前主要按 0 与 >0 区分,但不应依赖 1/2 名称推导职责。

MEDIUM · 等待语义

waitClient 未进入服务端执行判断

当前只发现该字段被导出、反序列化和深拷贝,没有发现执行分支使用。客户端等待/恢复必须用真实协议闭环验证。

MEDIUM · 挂载边界

NPC 服务端挂载代码被注释

服务端会读取 Npc.skill 并复制流图,但 npcEntity.addComponent(flowCanvasComponent) 当前为注释状态,NPC 服务端节点能力不能按“已接通”使用。

7

主要证据索引

点击链接可在允许 file:// 的本地浏览器中打开文件。