[Unity+Live2D]ドコモAIエージェントを使ってLive2Dモデルと会話してみた(2020/8/12以降の手順)

# はじめに
Unite Tokyo 2019で講演された[【Unite Tokyo 2019】中の人がいない！？ 音声対話型AIサービスを使ったバーチャルキャラクターの作り方](https://www.slideshare.net/UnityTechnologiesJapan002/unite-tokyo-2019-ai)を見ていて、ドコモAIエージェントを使えばLive2Dモデルと簡単に会話できるのでは？と思ったので、やってみました。

__2020/8/12よりトライアル環境のAPIが変更されていましたので (詳しくは、[デバイス・ユーザ認証について | ドコモAIエージェントAPI – ドキュメントサイト](https://docs.sebastien.ai/documents/basic05/#trial_info)へ) 、更新という形で新たに記事を書いています。__
__基本的には公式ドキュメントを見れば動かせるようになっていますが、いくつか補足します。__

## ドコモAIエージェントとは
音声・テキストユーザーインターフェースをパッケージ化した対話型AIのASPサービス。

## Live2Dとは
2Dイラストを変形させて立体的に表現することを可能にするソフトウェア。
モーフィング(滑らかに変形して別の状態に変更させる)によって実現する。


# 手順
基本的には公式ドキュメント( https://docs.sebastien.ai/documents/ )をみて進めていきます。
2020/1現在の手順で進めていますが、今後手順は変更する恐れがありますので公式ドキュメントをみながら補足としてこちら記事を見ることをお勧めします。

## ドコモAIエージェントAPIとUnityを連携
### SDKの取得
公式ドキュメント( https://docs.sebastien.ai/documents/ )のUnityのダウンロードをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/cbeb73d0-50f1-caf9-998d-c715998b1055.png)
GitHub( https://github.com/docomoDeveloperSupport/speak-unity-sdk )からReleasesにある最新のUnity用のSDKをダウンロードしてください。
「SpeakSDK.unitypackage」がSDKになります。

READMEにも記載があるようにユーザーズガイドに沿って、サンプルアプリを動かしてみることにします。
>本SDKの利用方法は下記ユーザーズガイドをご確認ください。
Speak Unity SDK User's Guide


### サンプルアプリの取得
GitHub( https://github.com/docomoDeveloperSupport/speak-unity-sample )からリポジトリをCloneするかダウンロードして取得します。

READMEに記載されている動作条件に合うように環境を整えます。
Unityのバージョンが異なるとうまく動きませんでした。合っているか注意しましょう。

サンプルアプリを開いたら「SpeakSDK.unitypackage」をインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/d5e37946-1e94-281a-33f8-22c149a9d537.png)

別ウィンドウが開きますので全てにチェックがついていることを確認して「Import」ボタンを押下します。

## ドコモAIエージェントAPIのセットアップ
GitHub( https://github.com/docomoDeveloperSupport/speak-unity-sample )のREADMEにある利用方法から「Agentcraft_speak_sdk_for_unity_tutorial.pdf」をみていきます。

「3.Agentcraftへの登録・エージェント作成」を見てエージェントを新規作成します。
Agentcraft( https://agentcraft.sebastien.ai/ )にログインして、アカウントを作成します。
エージェントはこのようなサンプルを使いましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/1cd3c2e7-4783-1cac-500b-08de397181fa.png)

「3.1.Agentcraft利用した認証用トークン作成」を見て認証用トークンを発行します。
今回はトライアル環境で動かしてみるのですが、認証用トークンも必要なので発行します。
Agentcraft( https://agentcraft.sebastien.ai/ )のGUI上で認証用トークンを作成できます。
詳しくは「Agentcraft_speak_sdk_for_unity_tutorial.pdf」を参考人してください。
以前は、デバイスIDをSEBASTIENのUser Dashboard(UDS) ( https://users-v2.sebastien.ai )に登録していましたが、Agentcraftで管理されるようになって楽でいいですね。

「3.2.デバイストークンのセット方法」を見てデバイストークンを設定します。
これでサンプルアプリを動かす準備が整いました。実際に動くかどうか確認してみて音声対話ができてたらOKです。


## Live2DモデルをUnityに追加
先ほどのドコモAIエージェントAPIを入れた環境でLive2DモデルをUnityで動かせるようにします。
以下を参考に環境構築をしてください。
[Unity初心者がUnityでLive2Dモデルを動かすため環境構築をした](https://qiita.com/nori0__/items/988dcd7b038c838ca851)  

[こちら](http://www.live2d.com/download/sample-data/)にある桃瀬ひよりのFree版モデルを使います。
mainのSceneにプレハブファイルに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/b672960d-1c56-6947-f4a6-f13527a78a67.png)

Transformは以下のように設定すればGameビューで見えるようになるはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/ed8c7355-d129-657a-0b56-7808a8a83633.png)

また、Main Cameraを以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/0cfa2dcd-ca3a-b556-4318-a170b2592e62.png)

これで環境が整いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/efd1a57a-1f65-fb7a-1d8f-1260ae8a18ab.png)

ただこれだとLive2Dのモデルが動かず会話している感がでないので、リップシンクするよう設定します。

[[Unity+Live2D]再生する音に合わせてリップシンクする](https://qiita.com/nori0__/items/4936a13602812cbf3cf5#%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%E9%9F%B3%E5%A3%B0%E3%82%92%E5%86%8D%E7%94%9F%E3%81%97%E3%83%AA%E3%83%83%E3%83%97%E3%82%B7%E3%83%B3%E3%82%AF%E3%81%99%E3%82%8B)にある「起動時に音声を再生しリップシンクする」のAudio Sourceを作る手前まで手順に従って設定してください。

その後、hiyori_free_t06のCubism Audio Mouth Input (Script)に下記の設定を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/ccf9911e-8d33-6ab8-c49b-79f5c7022316.png)
Canvasは下記のCanvasを選択します。
CanvasでドコモAIエージェントAPIに登録した会話の音を再生されるため、CanvasにあるAudioClipの音量を使ってリップシンクします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/24d4b8f0-0409-7b1c-058e-f44ee8cb6819.png)

これで環境は整いました。
UnityのPlayボタンを押下して、動かしてみましょう。
「SDKstart」を押下した後、マイク入力が可能になるので話しかけてみてください。
「送信」の左にあるブロックに入力して「送信」を押下しても会話ができます。

私の滑舌が残念で、上手く答えてくれないときもありますが、ノンプログラミングで音声入出力をしてくれるのはかなり楽でいいなと思います。
フローチャートで作るので、会話の抜け漏れなく整理して使えそうなのも良さそうです。

ドコモAIエージェントAPIは商用利用は料金が発生します。詳しくは 公式HP( https://docs.sebastien.ai/ )でご確認ください。

# 感想
UnityEngine.Windows.Speechに定義されている音声認識で同じことをしようとするとコードごりごり書いても実現は難しそうですよね。そう考えるとすごく楽ですね。
フローチャートで会話を作ること自体はAlexaスキルのノンプログラミングサービスに近いものを感じました。
ドコモAIエージェントAPIは、コマンドをJson形式でUnityへ送れるので音声認識と繋げて何かするのにも使えて活用の幅が広がりそうですね。
UnityとAlexa繋がらないかなと思っていたので、それに近しいことができそうな気がしてワクワクしました。