CrossRoadスマートフォン用の表示で見るCrossRoadAR、MR、VR、Babylon.jsを中心とした技術ブログ。HoloLens前回、CortanaとUnityを連携する方法を紹介しました。Technologyこのときは「Unity側で定義した会話文を元にCortanaとおしゃべりする」、というものでした。構成としては、Unity→UWPのXAML→Cortanaを呼び出す→Cortanaがユーザの声を認識する→Unity側で定義した言葉を、Cortanaがしゃべるです。今回は、Unity→UWPのXAML→Cortanaを呼び出す→Cortanaがユーザの声を認識する→認識した結果に応じて、Unity側で定義した関数を呼ぶを作ってみたので、この内容を解説したいと思います。さんに小さくしていただきました。(@kaorun55さん、ありがとうございます)これを元にCortanaからUnity関数を呼ぶ機能を追加したものを作りました。以後、このプロジェクトの使い方を説明していきます。追記ソースコードをzipで固めて下記におきました。Unityからのビルドが必要です。認識させたい文字列を定義するUnity側では、音声しゃべったら呼びたい関数を作ります。今回のサンプルでは、"fire"としゃべって火の球を発生させ、"Go"としゃべって火の球を的に当てる、という動きを作ってみました。CortanaController.csでは、以下のように文字を定義します。Unity側ではこのようなスクリプトを準備しました。(長いのでここには記載しておりません。リンク先からご確認ください)gistee5bb0e9d9ad24f3d6c61d4af5b3f85dここは説明不要で、publicで宣言した関数を書いているだけです。ビルドする前回ブログの内容を再掲します。ビルド設定は下記の通りです。チェックをつけると設定します。その後、UnityからBuildを実行し、ビルド結果の保存先をAPPフォルダにします。TypeはXAMLにしてください。D3Dにすると、その後の設定でCortanaの制御ができなくなります。Phoneというオプションもあります。MobileにDeployできました。Supportedにチェックを入れると、全天周のアプリになります。VR系アプリを作っている方は想像しやすいと思いますが、CG空間の一部だけがレンダリングされ、センサの向きによって表示される内容が変わるものです。チェックを入れないと、普通のUWPアプリと同一の扱いになり、空間に張り付けることができます。Mobile用のUWPにしたところ、問題なく動きました。VoiceSpeech.csを修正するVoiceSpeech.csは、Cortanaによる音声聞き取り、音声再生を担当しています。具体的には、StartListeningという非同期のメソッドによって、音声受付状態になります。ContinuousRecognitionSession_ResultGeneratedという非同期のメソッドによって、認識した結果をstringにします。VoiceResponseという非同期のメソッドによって、Unity側で定義したQ&Aを元に、該当する回答分を選定してSpeakメソッドを呼びます。synthStream.ContentType);によって、音声を再生します。UnityPlayer;を追加します。すると、元のプロジェクトにはUnityEngineやUnityPlayerが入ってないのでエラーになります。Referenceを選択します。開いたWindowのBrowseをクリックし、UnityPlayer.winmdと、UnityEngine.dllを指定します。それぞれのパスは以下の通りです。CortanaUnityConnection\APP\CortanaUnityConnection\Unprocessed\UnityEngine.dllCortanaUnityConnection\APP\Players\UAP\ARM\Debug\UnityPlayer.winmd(HoloLensの場合は、UAP直下がx86になります)その後、以下のようにソースコードを修正します。(長いのでここには記載しておりません。リンク先からご確認ください)gist8babcdb5137a437fa6e32562ae5922f9すると、ソースコードに記載したUnityのComponentが見つからないというエラーがでます。今回の場合、InvokedByCortanaコンポーネントを呼び出している下記の箇所が原因です。go.GetComponent<InvokedByCortana>().generateFlare();これは、Plugin.Windows10.Speechプロジェクトが、Unity側のプロジェクトを認識できていないためです。Referenceします。ここで、Assembly-CSharpというプロジェクトを二つとも選択してOKをクリックすれば、Unity側のプロジェクトを認識し、エラーが消えます。StudioでCortanaを使うように設定する以下は、前回のブログと同一です。Deploy前回のブログと同一です。Editorによるスクショを紹介します。起動すると、このようにボードと球体が表示されます。(HoloLensの場合、黒い部分は透過しています)この状態で、"Fire"と発声すると、火の玉が出ます。「ファイアー」とカタカナ英語的に発音しても出ます。続いて、"Go"と発声すると、火の玉が球体に向かって飛んでいきます。当たると音が鳴って二つとも消滅します。うまく表示や制御を工夫すると、魔法を出すような表現ができます。HoloLensで使うと、現実と重畳できるので、これだけでも色々と可能性を感じます。「NamamugiNamagomeNamatamago」を認識対象に追加してみたところ、認識してくれました!そこで、「なまむぎなまごめなまたまご」と発声すると、このようにたまごが出てくるようにしてみました。(サンプルプロジェクトには含まれていませんが、CortanaController.csに追加して手順通りビルドするだけで確認可能です)Cortonaの認識精度は相当高いですね。終わりに今回、CortanaからUnityを呼ぶ原理を紹介しました。MobileやDesktopで動きます。(ちゃんと試してませんが、ソース側で言語設定を日本語にすれば、Windows10デスクトップでも使用可能なはずです)VoiceSpeech.csをうまく改造すると、わりと何でもできます。認識率が高いので、呪文詠唱とか、これまでとちょっと違うゲームも作れそうですね。先日、ついに日本でもHoloLensが発売されました。»ProfileAR、MR、VR、Babylon.jsを中心とした技術ブログです。広く色々な技術を勉強するのが好きで、あれこれ書いています。詳細なプロフィールはこちらをご確認ください。2020)■プライバシーポリシー■こちらに記載しておりますのでご確認ください。■お問い合わせ■こちらよりお願いいたします。月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。