CrossRoad

Unity、VR、MR、ARを中心とした技術ブログ

【2016/6/21更新】CortanaをUnityで使う方法の調査まとめ

2016/7/2 追記

(1) の動作確認ができました。
本記事はメモとして残します。別の記事で動作確認する方法を記載しましたので、以下をご確認ください。

Unity→UWPでCortanaの機能を使う仕組みについて - Cross Technology

2016/6/21 追記

(1-1)を更新しました。ただし、未解決は変わらず、です。

Cortonaを使うと、音声認識やキャラクターとの会話(電脳コイルっぽいこと)ができるのではと思い、Unityで使う方法を調べています。

しかし、色々と止まってしまい未だにサンプルの動作確認ができていません。未解決ではありますが、現時点で調べた内容を整理してみました。

1. そもそもUWPとUnityを連携させる方法はあるのか?

あります。

下記のforumでUnity Technologiesの方から紹介されているように、XAMLUnityConnectionというサンプルを使うと、Unityで書いた処理をもとにUWPを作り込むことが可能になります。

http://forum.unity3d.com/threads/passing-arguments-to-windows-10-unity-app-by-activating-it-with-cortana.368153/

XAMLUnityConnectionの置き場所は、下記のbitbucketです。

Unity-Technologies / WindowsStoreAppsSamples — Bitbucket

Gamasutra - Sponsored: Integrating Cortana with Unity in Windows Universal games (Unite 2015)

ところで、XAML(ザムル)とは、Windows系の画面デザイン用の言語です。(実際は他にも用途があるようですが、Windows 10 Mobileでは画面デザインはすべてXAMLで行っていました)

私が知る限り、XAMLは一つの画面を定義するときに使われ、その画面に紐付いたc#コードが対になっています。XAML Unity Connectionは、実際にはXAMLと対になっているC#でUnity側の処理を受けていると思われます。

2. CortanaをUnityで使う方法は?

今の所、2種類の情報を見つけました。特に、前半はMicrosoftの方が書かれた記事で、説明が丁寧かつ情報も豊富です。いずれも動作確認できていないため、内容は記事から推測しています。

(1) Unity側で定義した文章を元に、決まった形の対話を実現するサンプル

Voice Activating your Windows 10 games using Speech Synthesis, Voice Recognition and Cortana | digitalerr0r

記事の中にサンプルプロジェクトをダウンロードできるリンクがあります。

(2) UnityのMecanimとCortanaを連携させ、ユーザの声でアバターが踊るサンプル

Gamasutra - Sponsored: Integrating Cortana with Unity in Windows Universal games (Unite 2015)

どうやら、Unite2015でMicrosoftの方が紹介したもののようです。記事の中にダウンロードリンクがありますが、リンク切れでした。しかし、下記に同一と思われるものがありましたのでリンクを貼っておきます。

GitHub - Microsoft/unityplugins: Unity Plugins for Windows Store and Azure related functions.

3. 2016/6/18時点の調査状況

3.1 (1) の調査状況

そのまま実行した場合

サンプルプロジェクトを開き、Visual Studioからそのまま実行すると、アプリケーションが立ち上がります。しかし、マイクで話しかけても何も応答しません。

サンプルプロジェクトの設定が、en-US(使用言語:英語、地域:米国)となのに、使用環境がja-JP(使用言語:日本語、地域:日本)のためと思われます。

しかし、使用環境をen-USに変更すると、Cortanaが使用できなくなりました。そのため、サンプルプロジェクトそのままでは動作確認できませんでした。

Cortanaが使用できなかった画面

    • -

2016/6/21 追記

Windows10 Mobileで、言語を英語、地域をUnited Statesに変更してから再起動すると、CortanaのUWPサンプルが使えました。下記のUWPサンプルコードの中にある、Cortana VoiceCommandというソリューションを使いました。

GitHub - Microsoft/Windows-universal-samples: API samples for the Universal Windows Platform.

(1)のUnityプロジェクトをWindows 10 Mobileにビルドして試したところ、3D空間の中でCortanaを起動させる場所まで移動する必要がありました。しかし、キー入力による移動ができず、動作確認ができませんでした。

有線キーボード、キーパッド:Windows10 Mobileは、2016/6時点で有線の入力に対応していない

Bluetoothゲームパッド:Bluetoothのペアリングはできたが、ゲームパッドの操作はできなかった

    • -
Unityでビルドし、Visual Studio 2015 update2から編集した場合

Unity5.2で開き、ビルドを実行すると、ビルドは終了するが、エラーメッセージが出て、UnityEngine.dllなど、dll系の生成に失敗しました。

Unity5.2でdll生成に失敗した時のエラーメッセージ表示画面

そのため、Visual Studioで開いても、MainPage.xaml.csのusing UnityEngine.Windows;、およびこれに関係するメソッドの読み込みでエラーになりました。一方、Unity5.3.5で開き、ビルドを実行すると、ビルドエラーは起きませんでしたが、UnityEngine.dllなど、dll系の生成に失敗しました。

Unity5.3.5を使っていた時、不定期にUnity5.3.5のWebPlayer以外のビルドができなくなる

普通、Build SettinsgでPlatformを選ぶ時、インストール時に選択しておいたプラットフォームを選択できます。

しかし、(1)を試している時、少なくとも2回、Windows Store、Android、WegGLなど、事前にインストールしたプラットフォームがすべてNo module foundになってしまいました。

PC再起動やプロジェクトフォルダの削除で直るかも、という情報をいただきましたが、試す前に再インストールしてしまったので、対処方法になるかは確認できていません。

3.2 (2)の調査状況

これは初期からつまづいていて、Unityのサンプルプロジェクトを開いたら、Microsoft.UnityPluginsがないというエラーが多数出ている状況です。

Unityのサンプルプロジェクトを開いたらエラーが出ている例

では、Microsoft.UnityPluginを入れればと思ったのですが、このように多数あり、どれを入れるべきかがわかりませんでした。

そもそも、Unityで読み込ませる方法が不明という問題もありますが、、

4. 終わりに

下記で@kaorun55さんもおっしゃっているように、HoloLensで対話的なAIアプリを作るには、HoloLensのサンプルにあるVoiceではなく、CortanaをUWPで活用することが必要と思います。

CGの表現はUnityが楽なので、連携方法を調べていたら(1)と(2)に丁寧なサンプルと解説があったので、まずは動作確認からと思っていたのですが、ちょっと見込みが甘かったようです。

とはいえ、今うまくいってないのは、私のWindows10側のアプリ開発知識が足りてない可能性も十分にあるので、並行して調べていた、UWP単体でCortanaを使う方法の理解を先に試してみようと思います。