对话系统图引擎
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/dialogue-systems-zohg。
技能介绍
你要解决的问题
分支对话看起来简单,实际很容易变成一堆散落的 if、文本切换和状态变量:台词写进 UI、选项逻辑和游戏循环耦合在一起,加一个分支可能要改多处;换个语言或重排剧情时,散落的字符串又会迅速变成重写。
这个技能的思路是把对话当图来管理:节点保存台词与选项,选择用来分支,条件控制选项是否出现,变量记录玩家做过什么,后续对话再读取这些状态。
它如何工作
核心流程是先定作者方式,再定义节点契约,最后接入游戏循环。
- 选择实现路线:对话重且需要写作友好的流程时用 Ink;强节点结构、引擎 hooks 多时用 Yarn Spinner;需要完全控制或依赖尽量少时,用自定义 JSON/资源图加一个小型解释器。
- 定义节点输出:每个节点只产出一种结果:
行、选项集合、命令/副作用,或结束/跳转。运行器负责推进图,并把行和选项交给 UI。 - 分离变量与流程:维护布尔、数字、字符串变量仓,条件读取变量,
set写入变量;不要把叙事状态塞进 UI 组件。 - 一开始就本地化:文本用
行 ID从字符串表查找,显示文案再由不同 locale 提供。 - 由游戏循环驱动:运行器就是一个状态机:
当前节点 → 输出内容 → 等待输入 → 推进。 - 逐分支验证:至少走一遍关键选择路径,检查条件是否生效、变量是否正确写入,以及每个分支是否能到达结束或合法跳转。
适用边界与注意点
- 不要为了简单分支树发明脚本语言。如果只是行、选项、标志位,一个 JSON/资源图加几十行运行器通常更稳。
- 不要把显示字符串直接硬编码进节点;否则本地化会变成逐条重写。
- 不要把变量存在 UI 上,或让状态只在文本节点里临时维护;持久化叙事状态请交给存档系统。
- 不要留下无
next、无选项且不end的节点,否则运行时可能静默卡住。 - 可重访节点里的副作用要放在转换时执行,或用
seen标志保护,避免重复扣减或重复触发。
适合做对话图、选项菜单、影响后续剧情的叙事状态,也适合在 Ink、Yarn Spinner 与自定义资源格式之间做选型。不适合做引擎 UI 控件,也不适合跨会话存档。
使用场景
- 在 RPG 或视觉小说项目中,需要把选项菜单、条件门控和变量写入组织成图,并接入游戏循环推进节点
- 团队准备用 Ink 写分支叙事,但不确定何时改用 Yarn Spinner,需要按节点契约和引擎 hooks 做选型评审
- 对话脚本已经写好,但要接入游戏循环:输出当前行、展示选项、执行命令、跳转到下一节点
- 需要避免把显示字符串写进节点,为后续多语言版本预留行 ID 与字符串表结构
适合人员
- 负责对话系统接入游戏循环的的游戏开发者,需要在节点输出与状态机之间做工程取舍
- 关注叙事状态与 UI 分离的系统工程师,想把变量仓、条件和持久化边界理清楚
- 使用 Ink 或 Yarn Spinner 的技术策划,需要在写作友好与引擎 hooks 之间选择实现路线
- 处理多语言文本的技术写作支持工程师,希望行 ID 和字符串表先于 UI 布局确定