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

WebGL

将 Convai Unity SDK 部署到 WebGL,涵盖 HTTPS、浏览器音频手势、视觉画布捕获以及已知的唇形同步漂移问题。

Convai Unity SDK 在 WebGL 上支持语音对话、口型同步、动作、动态上下文、情绪、Vision 和长期记忆。浏览器带来了原生平台上不存在的三个限制:访问麦克风必须使用 HTTPS 来源;在开始音频播放或麦克风采集之前需要用户手势;以及 Vision 采集路径基于 canvas,而不是 Unity RenderTexture。本页涵盖了这三项。

由 Convai 驱动的 Unity 6 Web 项目(以前称为 WebGL 构建)

功能支持

功能
WebGL

语音对话

✅ 完全支持

口型同步

✅ 完全支持(参见故障排除中的已知问题)

动作

✅ 完全支持

动态上下文

✅ 完全支持

情绪

✅ 完全支持

视觉

✅ Canvas 采集(浏览器游戏视图)

长期记忆

✅ 完全支持

空间音频

❌ 不支持

屏幕共享

❌ 不支持

麦克风设备选择

❌ 不可用——由浏览器控制设备选择

Unity AudioSource 播放

❌ 不支持——仅限浏览器音频路径

麦克风测试/预检查

❌ 不支持

浏览器要求

iframe 嵌入: 当将 WebGL 构建嵌入 iframe 时,父页面必须包含 allow="microphone" 组件上的 <iframe> 元素。否则,无论 HTTPS 状态如何,浏览器都会阻止麦克风访问。

麦克风设备选择: 浏览器会控制所有麦克风设备选择。对话开始时,浏览器会显示自己的权限提示,并允许用户选择麦克风设备。SDK 在 WebGL 上返回空的设备列表——设置面板中的麦克风下拉框不会显示任何条目。这是预期行为,不是错误。原生平台可用的麦克风测试功能在 WebGL 上不受支持。

示例:LMS iframe 嵌入

一家制造公司在其学习管理系统中嵌入了一项安全合规演练。LMS 的 iframe 从以下地址加载 WebGL 构建: https://sim.company.com/safety-drill。Convai 角色扮演现场安全官,测试操作员对场景内危险情境的响应。

设置:

  1. LMS 页面包含 allow="microphone" 在 <iframe> 元素上:

  2. WebGL 构建通过 HTTPS 提供。

  3. 一个明确的 开始演练 按钮放置在场景加载屏幕上,并连接到 ConvaiManager.EnableAudioAndStartListening().

结果: 操作员点击 开始演练,在浏览器提示中授予麦克风权限,然后开始口头合规评估。

音频手势处理

在允许音频播放或麦克风采集之前,浏览器要求先进行用户交互。SDK 通过两种方式处理这一点:

自动手势检测: 连接后,SDK 会监听首次发生在 UI 元素外部的点击或触摸,并调用 EnableAudioAndStartListening() 在 ConvaiManager 自动执行。这适用于用户直接与 3D 视图交互的场景。

显式 Start 按钮(推荐用于 UI 较多的场景): 对于带有全屏覆盖层、加载屏幕或任何在加载时遮挡视图的 UI 的场景,自动检测可能无法可靠触发。添加一个显式 Start 按钮并将其连接到 ConvaiManager.EnableAudioAndStartListening().

自动手势检测和显式 Start 按钮并不互斥——二者可以同时启用。当 UI 在加载时覆盖场景时,Start 按钮方案更可靠。

  1. 添加一个 Button 将组件添加到一个 UI GameObject。

  2. 在 On Click () 列表中,单击 +.

  3. 拖拽你的 ConvaiManager GameObject 到对象字段中。

  4. 在函数下拉菜单中,选择 ConvaiManager → EnableAudioAndStartListening.

示例:企业入职培训

一家企业 L&D 团队在其公司内网上托管了一项公司政策培训模拟,地址为 https://training.company.internal/onboarding。Convai 角色扮演一位人力资源代表,带领新员工了解各类政策场景。

设置:

  1. 构建通过公司内网服务器的 HTTPS 提供。

  2. 某个 Start Conversation 按钮使用上面的 Inspector 方法放置在欢迎屏幕上。 ConvaiManager.EnableAudioAndStartListening() 连接到该按钮的 On Click () 事件。

  3. 标准 SDK 配置——无需额外的 WebGL 特定步骤。

结果: 员工点击 Start Conversation ,在欢迎屏幕上。浏览器会显示麦克风权限提示。授予权限后,Convai 角色开始入职对话。单击按钮后,欢迎屏幕会自动隐藏。

WebGL 上的 Vision

在 WebGL 上,Vision 以浏览器 canvas 中渲染的 Unity 游戏视图作为采集内容。SDK 使用内部的 WebGLCanvasVideoSource 将浏览器 canvas 作为视觉帧源发布——标准 CameraVisionFrameSource 组件在此平台上不使用。

与原生 Vision 的主要区别:

行为
原生
WebGL

帧源

CameraVisionFrameSource 或 WebcamVisionFrameSource

浏览器 canvas

最大帧率

可配置

15 fps(固定)

摄像头访问

支持

SDK 不提供

RenderTexture 发布

支持

不使用

WebGL Vision 采集玩家在浏览器中看到的内容——即游戏视图。对于角色需要通过摄像头查看学习者物理环境的场景,请使用带有 WebcamVisionFrameSource 替代。

构建验证清单

在发布 WebGL 构建之前,请逐项验证:

故障排除

症状
可能原因
修复方法

麦克风从不激活;角色听不到输入

构建通过 HTTP 提供,而不是 HTTPS

请通过 HTTPS 提供构建。 localhost 被豁免。

iframe 中的麦克风被阻止;权限提示从未出现

缺少 allow="microphone" 组件上的 <iframe> 元素

添加 allow="microphone" 嵌入页面上的 iframe 标签中。

角色音频静音;没有播放

在尝试音频播放之前未收到用户手势

添加一个显式 Start 按钮并将其连接到 ConvaiManager.EnableAudioAndStartListening().

设置面板中的麦克风下拉列表为空

预期行为——浏览器在 WebGL 上控制设备选择

无需修复。浏览器权限提示会处理设备选择。

麦克风测试失败或不可用

WebGL 不支持

预期行为——告知用户浏览器构建中无法进行麦克风测试。

没有空间音频;语音缺少 3D 定位

WebGL 不支持空间音频

这是预期行为。可考虑在 UI 中说明这一点(例如耳机提示)。

口型同步时序漂移

症状: 语音音频与口型动画之间会出现可见的不同步,尤其是在较长的语句中。

原因: 在 WebGL 上,SDK 使用 RealtimePlaybackClock (基于 Time.realtimeSinceStartupAsDouble)而不是原生平台上使用的硬件 DSP 时钟。DSP 时钟与音频硬件绑定,可提供精确到采样的时序。 Time.realtimeSinceStartupAsDouble 独立于音频管线运行,这会导致漂移随时间累积。

解决方法: 目前没有可行的变通方案。

验证: 在发布前,请在浏览器中跨完整对话轮次通过视觉方式评估口型同步时序。

下一步

一旦确认 HTTPS、处理好手势要求并通过验证清单,你的 WebGL 构建就可以就绪。如果你还要部署到 iOS、Android 或 XR 头显,这些平台有各自的权限要求。

iOS 和 AndroidXR 头显

最后更新于

这有帮助吗?