THE Circle 是一个以“圆环 / 莫比乌斯结构”为核心隐喻的交互叙事原型:玩家通过语音与 NPC 进行对话,系统把语音实时转成文本 → 交给大模型生成回应 → 再用 TTS 合成为声音播放出来,同时驱动剧情节点、线索与环境反馈(灯光/视频/材质效果)。
它更像一个“可对话的展陈装置 / 互动叙事系统”,而不是传统线性剧情游戏。

工程解析与核心思路
1) 语音到语音:Realtime Speech → LLM → TTS 的闭环
核心链路是:
- 实时转录:麦克风语音被转成文本(项目里通过
RealtimeTranscriber组件接入) - LLM 对话:把转录文本与 NPC 设定、上下文拼成 prompt,调用对话 API 获取回复
- 见:
ChatYiQianWenClient.cs(BuildPrompt / Send / Buffer 机制)
- 见:
- 语音合成:把 LLM 回复送入讯飞 TTS,拉取音频片段并播放
- 见:
XunfeiTTS.cs(Login / SendTTSRequest / FetchAndPlayAudio / AudioSource 播放、会话管理)
- 见:
工程点:
- 我把 Unity 的
UnityWebRequest封装成支持 async/await 的写法,避免协程“回调地狱”,让网络请求链路更可维护。- 见:
UnityWebRequestExtensions.cs
- 见:
- 为了保证对话“更像在说话”,我加了 缓冲区/分段发送 的逻辑(把用户实时转录的内容分段送给模型,减少等待感)。
- 见:
ChatYiQianWenClient.cs(AddToBuffer / SendBufferedTextPeriodically)
- 见:
2) 可控的剧情结构:节点 / 分支 / 自动跳转
我实现了一个“轻量但够用”的分支对话系统:
- 每个剧情节点
DialogueNode支持多句台词(dialogueLines) - 支持分支选项
DialogueChoice(按钮文字 + 跳转节点 id) - 支持无选项时的自动跳转
nextDialogueId,以及isEnd结束节点
对应代码:DialogueSystem.cs
(UI 侧使用 Text + Button 预制体,脚本从 Resources 的剧情文件读取并驱动 UI。)
3) 线索 / 事件:用 Tag 组织叙事要素(可检索、可触发)
我把“故事事件”抽成数据结构:
StoryEvent: eventId / description / tagsStoryEventUtils.FindEventsByTag: 通过 tag 快速检索事件集合
这让剧情不是硬编码在某一段 UI 逻辑里,而是可以按“线索标签”做关联、统计、触发。
对应代码:StoryEvent.cs、StoryEventUtils.cs
4) 展陈/装置的环境反馈:串口驱动灯光/视频/材质
项目里我做了一个串口控制器,用来把“叙事状态”映射到现实世界反馈:
- 串口读取外设数据
- 根据指令切换
VideoPlayer播放内容 - 驱动材质(例如视频材质)以形成情绪/场景变化
对应代码:SerialHueController.cs
(依赖 SerialPortUtilityPro 插件,方便在 Unity 内处理串口事件。)
5) 视觉表达:莫比乌斯 Fullscreen ShaderGraph
为了配合 “Circle / Möbius” 的核心意象,我制作了一个全屏 ShaderGraph(MoebiusFullScreen.shadergraph)作为视觉层的统一风格与过渡效果基础:
它可以作为场景氛围、UI 过渡、章节切换的视觉“胶水”。
技术栈
- Unity / C#
- UnityWebRequest(网络请求)、TextMeshPro(UI)
- Newtonsoft.Json(JSON 序列化)
- 讯飞 MSC TTS(本地/SDK 调用,
XunfeiTTS.cs) - SerialPortUtilityPro(串口)
- VideoPlayer / Shader Graph(视觉与媒体)
进一步迭代方向
- 把 LLM 与 TTS 的 Key 全部移出仓库:统一配置入口 + 编辑器校验
- 对话记忆与状态机:把“NPC 当前态度/线索进度”显式建模(可存档、可回放)
- 内容制作工具:把
DialogueNode/StoryEvent做成可视化编辑器(ScriptableObject + Inspector) - 性能与体验:TTS 音频缓存、并发/取消机制、断线重试、超时降级
链接
- 演示视频:
- 代码仓库:https://github.com/FFFeiya/THE-Circle-narrative
- 设计长图:文章