WebGL
将 Convai Unity SDK 部署到 WebGL,涵盖 HTTPS、浏览器音频手势、视觉画布捕获以及已知的唇形同步漂移问题。
Convai Unity SDK 在 WebGL 上支持语音对话、口型同步、动作、动态上下文、情绪、Vision 和长期记忆。浏览器带来了原生平台上不存在的三个限制:访问麦克风必须使用 HTTPS 来源;在开始音频播放或麦克风采集之前需要用户手势;以及 Vision 采集路径基于 canvas,而不是 Unity RenderTexture。本页涵盖了这三项。
功能支持
语音对话
✅ 完全支持
口型同步
✅ 完全支持(参见故障排除中的已知问题)
动作
✅ 完全支持
动态上下文
✅ 完全支持
情绪
✅ 完全支持
视觉
✅ Canvas 采集(浏览器游戏视图)
长期记忆
✅ 完全支持
空间音频
❌ 不支持
屏幕共享
❌ 不支持
麦克风设备选择
❌ 不可用——由浏览器控制设备选择
Unity AudioSource 播放
❌ 不支持——仅限浏览器音频路径
麦克风测试/预检查
❌ 不支持
浏览器要求
麦克风访问需要 HTTPS。 浏览器会阻止非安全来源的麦克风采集。请通过 HTTPS 提供你的 WebGL 构建。唯一的例外是 localhost,浏览器会将其视为安全来源。部署到 http:// 会导致浏览器静默拒绝麦克风权限——用户不会看到任何错误提示,语音对话也不会开始。
iframe 嵌入: 当将 WebGL 构建嵌入 iframe 时,父页面必须包含 allow="microphone" 组件上的 <iframe> 元素。否则,无论 HTTPS 状态如何,浏览器都会阻止麦克风访问。
麦克风设备选择: 浏览器会控制所有麦克风设备选择。对话开始时,浏览器会显示自己的权限提示,并允许用户选择麦克风设备。SDK 在 WebGL 上返回空的设备列表——设置面板中的麦克风下拉框不会显示任何条目。这是预期行为,不是错误。原生平台可用的麦克风测试功能在 WebGL 上不受支持。
示例:LMS iframe 嵌入
一家制造公司在其学习管理系统中嵌入了一项安全合规演练。LMS 的 iframe 从以下地址加载 WebGL 构建: https://sim.company.com/safety-drill。Convai 角色扮演现场安全官,测试操作员对场景内危险情境的响应。
设置:
LMS 页面包含
allow="microphone"在<iframe>元素上:WebGL 构建通过 HTTPS 提供。
一个明确的 开始演练 按钮放置在场景加载屏幕上,并连接到
ConvaiManager.EnableAudioAndStartListening().
结果: 操作员点击 开始演练,在浏览器提示中授予麦克风权限,然后开始口头合规评估。
音频手势处理
在允许音频播放或麦克风采集之前,浏览器要求先进行用户交互。SDK 通过两种方式处理这一点:
自动手势检测: 连接后,SDK 会监听首次发生在 UI 元素外部的点击或触摸,并调用 EnableAudioAndStartListening() 在 ConvaiManager 自动执行。这适用于用户直接与 3D 视图交互的场景。
显式 Start 按钮(推荐用于 UI 较多的场景): 对于带有全屏覆盖层、加载屏幕或任何在加载时遮挡视图的 UI 的场景,自动检测可能无法可靠触发。添加一个显式 Start 按钮并将其连接到 ConvaiManager.EnableAudioAndStartListening().
自动手势检测和显式 Start 按钮并不互斥——二者可以同时启用。当 UI 在加载时覆盖场景时,Start 按钮方案更可靠。
添加一个 Button 将组件添加到一个 UI GameObject。
在 On Click () 列表中,单击 +.
拖拽你的
ConvaiManagerGameObject 到对象字段中。在函数下拉菜单中,选择 ConvaiManager → EnableAudioAndStartListening.
示例:企业入职培训
一家企业 L&D 团队在其公司内网上托管了一项公司政策培训模拟,地址为 https://training.company.internal/onboarding。Convai 角色扮演一位人力资源代表,带领新员工了解各类政策场景。
设置:
构建通过公司内网服务器的 HTTPS 提供。
某个 Start Conversation 按钮使用上面的 Inspector 方法放置在欢迎屏幕上。
ConvaiManager.EnableAudioAndStartListening()连接到该按钮的 On Click () 事件。标准 SDK 配置——无需额外的 WebGL 特定步骤。
结果: 员工点击 Start Conversation ,在欢迎屏幕上。浏览器会显示麦克风权限提示。授予权限后,Convai 角色开始入职对话。单击按钮后,欢迎屏幕会自动隐藏。
WebGL 上的 Vision
在 WebGL 上,Vision 以浏览器 canvas 中渲染的 Unity 游戏视图作为采集内容。SDK 使用内部的 WebGLCanvasVideoSource 将浏览器 canvas 作为视觉帧源发布——标准 CameraVisionFrameSource 组件在此平台上不使用。
与原生 Vision 的主要区别:
帧源
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 上的已知缺陷。 目前没有可行的变通方案。在发布前,请在浏览器中通过视觉方式验证你的 WebGL 构建,并在生产时间表中考虑这一限制。
症状: 语音音频与口型动画之间会出现可见的不同步,尤其是在较长的语句中。
原因: 在 WebGL 上,SDK 使用 RealtimePlaybackClock (基于 Time.realtimeSinceStartupAsDouble)而不是原生平台上使用的硬件 DSP 时钟。DSP 时钟与音频硬件绑定,可提供精确到采样的时序。 Time.realtimeSinceStartupAsDouble 独立于音频管线运行,这会导致漂移随时间累积。
解决方法: 目前没有可行的变通方案。
验证: 在发布前,请在浏览器中跨完整对话轮次通过视觉方式评估口型同步时序。
下一步
一旦确认 HTTPS、处理好手势要求并通过验证清单,你的 WebGL 构建就可以就绪。如果你还要部署到 iOS、Android 或 XR 头显,这些平台有各自的权限要求。
最后更新于
这有帮助吗?