For the complete documentation index, see llms.txt. This page is also available as Markdown.

转录 UI

使用内置聊天预制体、ITranscriptListener 回调或自定义 ITranscriptUI 实现来显示角色和玩家转录。

转录系统将角色和玩家语音传递到你的场景 UI,在运行时层处理中间识别、回合组装和生命周期管理。添加 ITranscriptListener 用于轻量级回调,或者 ITranscriptUI 用于完整显示控制,或者直接使用内置的 TranscriptUI_Chat.prefab 即可实现零配置聊天。

转录系统如何工作

下图展示了转录数据如何从运行时通过控制器流向你的场景 UI。

IRoomTranscriptEngine 是所有转录数据的唯一可信来源。 TranscriptUIController 负责当前激活的呈现策略,并将数据分派给与当前 ITranscriptUI 模式相匹配的实现。 ITranscriptListener 是一条平行、更简单的路径,完全绕过策略层。

ConvaiManager 自动发现场景中的所有 ITranscriptUI 是位于 ITranscriptListener 实现。常见情况下你无需手动注册它们。

集成路径

ITranscriptListener — 轻量级回调

使用 ITranscriptListener 当你需要对转录文本做出响应,而不想构建完整的自定义 UI 时使用。例如:将转录内容送入评分系统、写入日志、驱动自定义文本组件,或根据玩家所说的内容触发场景事件。

接口约定:

public interface ITranscriptListener
{
    // 可选。设置为某个角色 ID 以只接收该角色的转录。
    // 返回 null 表示不过滤。无论此值为何,始终会接收玩家转录。
    string FilterCharacterId { get; }

    void OnCharacterTranscript(string characterId, string characterName, string text, bool isFinal);
    void OnPlayerTranscript(string text, bool isFinal);
}

isFinalfalse 当语音仍在识别中(部分)以及 true 当回合完成时。部分转录会频繁到达——除非你需要实时流式反馈,否则只处理最终转录。

自动发现: 添加 ITranscriptListener 到任何 MonoBehaviour 的引用。 ConvaiManager 在初始化期间自动发现并注册所有实现。

多用户归属: 对于需要知道具体是哪位玩家发言的多用户房间,请实现 IMultiUserTranscriptListener 上的全房间事件:

ITranscriptUI — 完整显示控制

使用 ITranscriptUI 用于构建内置聊天或字幕 UI 的完整替代方案——自定义滚动列表、3D 世界空间面板、WebGL 中的 HTML 覆盖层,或内置预制体无法提供的任何布局。

接口约定:

标识符 决定哪个 ConvaiTranscriptMode 会激活此 UI。使用 “聊天” 替换聊天 UI, “字幕” 替换字幕 UI。

DisplayMessage 会对部分和最终转录都调用。检查 viewModel.IsFinal 来决定是继续更新气泡还是将其锁定。

注册: 将你的实现作为一个 MonoBehaviour 添加到场景中。 ConvaiManager 会自动发现它。若要手动控制:

方法
说明

ConvaiManager.ActiveManager.RegisterTranscriptUI(ITranscriptUI ui)

手动注册一个转录 UI 实现

ConvaiManager.ActiveManager.UnregisterTranscriptUI(ITranscriptUI ui)

手动取消注册一个转录 UI 实现

添加内置聊天 UI

SDK 随附 TranscriptUI_Chat.prefab —— 一个现成的、可滚动的聊天面板,带自动滚动和按发言者颜色区分的消息气泡。

1

将预制体添加到你的场景中

拖动 TranscriptUI_Chat.prefab 到你的场景中。你可以在 Prefabs/TranscriptUI/TranscriptUI_Chat.prefabcom.convai.convai-sdk-for-unity 包中找到它。该预制体包含自己的 Canvas —— 不要将其嵌套在现有的 Canvas 中。

该预制体包含一个 ChatTranscriptUI 组件,它会自动向 ConvaiManager on Awake.

2

确保场景中存在 EventSystem

聊天输入字段需要场景中存在一个 EventSystem 。如果你的场景中没有,请通过以下路径添加: GameObject → UI → Event System.

3

运行你的场景

连接到角色并开始说话。角色语音会显示在一个气泡列中;你的语音会显示在另一个气泡列中。随着对话推进,面板会自动滚动到最新消息。

ConvaiTranscriptDisplay — 角色本地显示

ConvaiTranscriptDisplay 是一个轻量级组件,用于将单个角色的转录直接显示在该角色的 GameObject上。它不参与房间转录流水线,也不了解其他角色或玩家。

Inspector 字段:

字段
默认值
说明

_transcriptText

TMP_Text 引用以渲染到

_showPartialTranscripts

true

在部分识别期间更新文本

_appendMode

false

追加新转录而不是替换

_clearOnNewFinal

true

在每次最终转录前清空缓冲区(仅追加模式)

_maxCharacters

1000

追加模式下保留的最大字符数。 0 = 无限制

要求: 必须位于相同的 GameObject 作为 ConvaiCharacter。在 Awake.

时会自动订阅该角色的转录事件。对于按角色显示的标签——例如训练站上方漂浮的名字牌或角色模型旁的面板—— ConvaiTranscriptDisplay 是正确选择。若要完整对话历史或玩家转录,请使用聊天预制体或 ITranscriptListener.

切换活动转录模式

通过运行时设置服务切换转录模式。更改会立即生效——相匹配的 ITranscriptUI 会激活,任何之前的 UI 都会停用。

用户也可以通过内置设置面板切换模式。参见 设置面板 了解面板在运行时可暴露哪些模式。

清空转录显示

调用 ClearAll() 在任何 ITranscriptUI 组件上,以销毁所有已显示的消息气泡并重置面板。这只会清除 可视显示 —— 底层的房间回合历史在 ConvaiManager.Transcripts 中是只读的,不受影响。

典型用例:

  • 新训练场景开始——从屏幕上清除上一场景的对话历史

  • 复盘后重置——学员已经查看过聊天;在下一次会话开始前清空

  • 场景切换——在加载新内容前清空,避免旧消息闪现

使用示例

安全培训——使用 ITranscriptListener

一个工作场所安全培训模拟通过读取 AI 教员的最终转录来对学员回答进行评分:

放置在任何 GameObject 的引用。 ConvaiManager 会自动发现并注册它。运行时,评分器会评估每条最终玩家回答,并记录学员是否正确识别了危险。

博物馆信息亭——使用 ConvaiTranscriptDisplay

一家自然历史博物馆的信息亭会在每个展品角色的陈列柜旁物理面板上显示其语音:

  • 添加 ConvaiTranscriptDisplay 添加到 ConvaiCharacter GameObject

  • 将面板的 TMP_Text_transcriptText

  • 设置 _appendMode 关闭,并 _clearOnNewFinal 开启——每个新的完整句子都会替换前一个

在运行时,每个角色的语音都会在游客与其互动时显示在其专用面板上,而无需完整聊天流水线带来的 UI 开销。

多用户消防演练——使用 IMultiUserTranscriptListener

一个多用户消防安全演练会跟踪具体是哪位学员发言以及他们说了什么,以便生成会后报告:

在运行时,每条最终确定的学员发言都会按姓名归属于特定学员,从而生成按参与者划分的演练转录,供会后回顾。

下一步

你已经了解了转录流水线架构、两种集成路径、内置聊天预制体、按角色显示、模式切换以及显示清空。下一步是配置默认渲染的模式,以及每种模式的外观和行为。

转录历史与查询聊天与字幕模式设置面板

最后更新于

这有帮助吗?