3. HoloToolkit Unity - 语音命令





5.00/5 (1投票)
增强现实和 Hololens 终于成为现实,对熟练开发人员的需求很快就会出现
引言
您自己的声音是控制 Hololens 的一种重要方式。
背景
如果您尚未在 PC 上安装 Hololens 的开发工具,您可能需要在阅读更多内容之前浏览以下文章
Using the Code
我们将从上一篇文章继续:2. HoloToolkit Unity - Gaze 和 Airtap,看看我们是否可以通过与立方体对话来让它执行一些操作。
内置语音命令
根据 Microsoft 支持,以下是一些您可以完全免费使用的基本命令,无需编写任何语句
Select
:使用此命令代替空中轻敲。凝视全息图,然后说“Select
”。Release
:释放之前选择的全息图。Place
:无需通过空中轻敲来放置全息图,只需说“Place
”。Face me
:凝视全息图,然后说“Face me
”将其转向您。Bigger
/Smaller
:凝视全息图,然后说“Bigger
”或“Smaller
”来调整其大小。
Cortana 也是一支不容忽视的强大力量...
您可以尝试以下操作
嘿 Cortana,
- 我能说什么?
- 增加音量。
- 降低亮度。
- 关机。
- 重新启动。
- 进入睡眠状态。
- 静音。
- 启动 <app name>。
- 将 <app name> 移到这里(凝视您希望该应用程序移动到的位置)。
- 转到开始。
- 拍照。
- 开始录制。(开始录制视频。)
- 停止录制。(停止录制视频。)
- 呼叫 <contact>。(需要 Skype。)
- 现在几点了?
- 向我显示最新的 NBA 比分。
- 我还有多少电池电量?
- 给我讲个笑话。
- 我的 IP 地址是什么。
制作您自己的命令
在 unity 中,从上次的场景 Scene_2
开始,并将其保存在您的 _CP\Scenes 文件夹中,命名为 Scene_3
。
此时,您可能已经对立方体感到厌倦了,所以删除您得到的立方体,转到菜单 Window\Asset Store 并搜索“Unity chan free”。下载并导入免费软件包。
在您的 Managers 游戏对象下的 Hierarchy 窗口中,创建一个新的 Empty 并将其命名为 SpeechManager
。按下 Add Component 按钮搜索 Speech Input Source 并将此脚本附加为组件。按下 + 按钮,添加 Keyword: Next 和 Key Shortcut N。再次按下 + 按钮,这次添加 Keyword: Back 和快捷键 B。
在 UnityChan 文件夹中,打开 Prefab 并将 prefab unitychan 拖到您的 Hierarchy 窗口中。选择 unitychan,然后在 Inspector 窗口中选择 Animator 组件。按下 Controller 字段右侧的小圆形按钮(突起??)并选择 UnityChanActionCheck
。禁用 Face Update 和 Idle Changer 脚本。在 Transform 组件中,设置 Position(0, -0.2, 3) Rotation(0, 180, 0)
和 Scale(0.2, 0.2 ,0.2)
。
在 unitychan prefab 上,添加组件 Capsule Collider 并在 unitychan 周围调整它。(这是为了能够用您的 Gaze 选择她。当您将鼠标悬停在她身上时,您会看到您的光标形状发生变化。)
现在在 unitychan prefab 上,选择 Add Component 并添加一个新的 C# 脚本,您可以将其命名为 SpeechIdleChanger
。
打开 ScriptIdleChanger
C# 脚本进行编辑,并写入一个新的 using
语句
using HoloToolkit.Unity.InputModule;
现在更容易找到 interface ISpeechHandler
。
实现 ISpeechHandler
并为其提供一些代码,直到您像这样
using UnityEngine; using System.Collections; using HoloToolkit.Unity.InputModule; using System; [RequireComponent(typeof(Animator))] public class SpeechIdleChanger : MonoBehaviour, ISpeechHandler { private Animator anim; private AnimatorStateInfo currentState; private AnimatorStateInfo previousState; void Start() { anim = GetComponent<Animator>(); } void Update() { if (anim.GetBool("Next")) { currentState = anim.GetCurrentAnimatorStateInfo(0); if (previousState.fullPathHash != currentState.fullPathHash) { anim.SetBool("Next", false); previousState = currentState; } } if (anim.GetBool("Back")) { currentState = anim.GetCurrentAnimatorStateInfo(0); if (previousState.fullPathHash != currentState.fullPathHash) { anim.SetBool("Back", false); previousState = currentState; } } } #region ISpeechHandler public void OnSpeechKeywordRecognized(SpeechKeywordRecognizedEventData eventData) { string myWord = eventData.RecognizedText.ToLower(); switch (myWord) { case "next": anim.SetBool("Next", true); break; case "back": anim.SetBool("Back", true); break; default: break; } } #endregion ISpeechHandler }
为了安全起见,我们还添加了对 Animator
组件的要求以及对其的引用。
使用 SpeechInputSource
与 InputManager
结合使用 ISPeechHandler interface
是在 HoloToolkit
中处理语音命令的较新首选方法。您还应该看看早期的 KeywordManager
,它仍然运行良好,通过引发您可以利用的事件。如果导出到 HoloLens 仿真器或真实设备,请不要忘记在 Project Settings\Player\Capabilities 部分中 打开您的麦克风。并且请查看 HoloToolkit\Input\Tests\Scenes 文件夹中的场景:KeywordManager
和 SpeechInputSource
。
先生们(和女士们),请启动您的引擎,如果一切顺利并且您的麦克风可以正常工作,您现在将能够告诉 Unity Chan 执行她的下一个动画。