2017年3月6日月曜日

HoloLensの開発効率化 KeywordManagerを利用して、超簡単にVoice Commandを実装しよう

お疲れ様です。ZuQ9->Nnです。 
今回はVoice Commandに挑戦です。

Voice Commandは、academyの101Chapter 4 - Voiceでは
KeywordRecognizer を使った実装が紹介されています。

HoloToolkit-UnityにはKeywordManager.csというスクリプトが用意されており
これを利用することで、簡単にVoice Commandを実装することができます。

まずは、HoloToolkit-Unityのインストールとプロジェクトの設定
今回は、Voice Commandを利用するので
UnityのHoloToolkitメニュー Configure > Apply HoloLens Capability Settingをクリック

Apply HoloLens Capability SettingsのMicrophoneのチェックをお忘れなく

UnityのHierarchyからCreate > Create Emptyで空のGameObjectを作成
作成したGameObjectを選択 Add Componentで
KeywordManager.csをアタッチメント
名前のよく似たKeyboardManager.csも存在するので
間違い無いように注意!!

今回は、Voice CommandでCubeとShpereを特定の座標に作成することにします。
UnityのProjectからCreate > C# Scriptで新しいScriptを作成
Script名はObjectCreator.csとします。

ObjectoCreator.csの中身はこんな感じ

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class ObjectCreator : MonoBehaviour {

    public void CreateSphere()
    {
        GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
        sphere.transform.position = new Vector3(-0.5f, 0, 3);
        sphere.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
    }

    public void CreateCube()
    {
        GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
        cube.transform.position = new Vector3(0.5f, 0, 3);
        cube.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
    }
}

UnityのHierarchyでGameObjectを選択、Add Componentで作成した
ObjectCreator.csをアタッチメント


GameObjectにアタッチメントされているKeyboardManagerの
Keyword And Responsesのsizeを2にを入ると
Element 0、Element 1が表示されます。

Element 0のKey Cordにhi、Key CodeにCをセット
ResposeのList is Emptyの+マークをクリック

Runtime Onleyの下のNone(Object)をクリックし、GameObjectを選択

No Functionのドロップダウンリストをクリックし
ObjectoCreatorのCreateCubeメソッドを選択

Element 1には、ぼぼ同じ手順で
のKey Cordにya、Key CodeにSを
Response()のRuntime Onlyには
ObjectoCreatorのCreateSphereメソッドを選択

なんとこれでVoice Commandの実装完了
Unityを実行します。UnityではKey Codeに設定した
Cを押すとCubeがSを押すとSphere作成されます。

KeywordやKey Codeは
かならず、今回と同じでないと動かないわけではなく
別に何を設定しても問題ありません。
自分がわかりやすいものを設定してください。
また、コード内のcube、Shpereの座標も任意で大丈夫です。
実機で動かすとこんな感じ、

hiというとcubeがyaというとsphereが作成されます
ちなみに、いちいち実機にインストールしなくても
HoloLens Emulatorでも確認できます。

実質的に開発者はVoice Commandそのものの実装ではなく
Voice Commandの後に何をしたいかという目的の
コードを書いてアタッチメントし呼び出すだけで良く
コンテンツの作成に注力できるように工夫されています。

なお、Voice Commandは、ISpeechHandlerの
OnSpeechKeywordRecognizedをオーバーライドすることでも実装できますが
今回のような複数のVoice Command場合
Voice Commandとメソッドが一対一になり、分岐処理がなくなり
追加、修正、削除が簡単になるのではと考えています。