65.9K
CodeProject 正在变化。 阅读更多。
Home

3. HoloToolkit Unity - 语音命令

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2017年4月12日

CPOL

3分钟阅读

viewsIcon

9369

增强现实和 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 组件的要求以及对其的引用。

使用 SpeechInputSourceInputManager 结合使用 ISPeechHandler interface 是在 HoloToolkit 中处理语音命令的较新首选方法。您还应该看看早期的 KeywordManager,它仍然运行良好,通过引发您可以利用的事件。如果导出到 HoloLens 仿真器或真实设备,请不要忘记在 Project Settings\Player\Capabilities 部分中 打开您的麦克风。并且请查看 HoloToolkit\Input\Tests\Scenes 文件夹中的场景:KeywordManagerSpeechInputSource

先生们(和女士们),请启动您的引擎,如果一切顺利并且您的麦克风可以正常工作,您现在将能够告诉 Unity Chan 执行她的下一个动画。

 

© . All rights reserved.