[Unity+Live2D]ドコモAIエージェントを使ってLive2Dモデルと会話してみた

# はじめに
<font color="FireBrick">__2020/8/12よりに[トライアル環境のAPIが変更](https://docs.sebastien.ai/documents/basic05/#trial_info)されており、記事の手順ではうまく動きません。<br>下記URLに更新という形で新たに記事を書きましたので、ご参照ください。__
https://qiita.com/nori0__/items/0834be8c63d32928c747 

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

# 手順
## ドコモAIエージェントAPIとUnityを連携
公式HPの手順( https://docs.sebastien.ai/step4/ )からUnity用のSDKをダウンロードしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/cbeb73d0-50f1-caf9-998d-c715998b1055.png)

zipには以下のファイルが入っています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/00059d23-a8d8-8e90-a0e2-a3ac8ed3cc16.png)

今回は、プラットフォームはWindowsで作るため「sebastien_1.21.1.unitypackage」のみインポートします。

テンプレート2DでUnityプロジェクトを作って、「sebastien_1.21.1.unitypackage」をインポートします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/d5e37946-1e94-281a-33f8-22c149a9d537.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/b744a4d6-311b-bf11-380f-c12ca8a5c4a6.png)

Build SettingでSceneでlogin、mainの順で追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/e28983e1-3e59-3925-a1d0-a9287c7c833e.png)


## ドコモAIエージェントAPIのセットアップ
先ほどのダウンロードしたzipにある「sdk_for_unity_supported_agentcraft.pdf」の◆AIエージェントの準備を参考にデバイスIDを登録します。

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)

設定からデバイスID一覧にある「デバイスIDの追加」をクリックして、デバイスIDを生成します。

このデバイスIDをSEBASTIENのUser Dashboard(UDS) ( https://users-v2.sebastien.ai )に登録します。
ログインしアカウントを作成して「新規デバイス登録」をクリックして登録してください。

因みに「sdk_for_unity_supported_agentcraft.pdf」には、ドコモAIエージェントAPIを使ったUnityのサンプルプロジェクトを作る手順が丁寧に書いてあります。困った時はこちらも参考にしてみてください。

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

桃瀬ひよりのFree版モデルを使います。
mainのSceneにプレハブファイルに追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/8586d118-bc6b-0bdb-b06e-2a12e0924796.png)

Transformは以下のように設定すればGameビューで見えるようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/6e57b6b6-b1c7-f304-c45b-20e1c82d8b34.png)

また、Main Cameraを以下のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/b1086c10-9c61-49ce-b9c6-aa45004253a7.png)

これで環境が整いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/5999ff07-f66c-92e4-fb5f-de396800a2c4.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を作る手前まで手順に従って設定してください。

その後、Audio InputにSpeakを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/8b002ee8-de7e-99c9-5025-ad190cbd3f37.png)
SpeakはドコモAIエージェントAPIに登録した会話の音を再生されるため、このSpeakにあるAudioClipの音量を使ってリップシンクします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/7893013d-3833-0ff6-6e9b-21d9ab9ed8ee.png)

これで環境は整いました。
Playボタンを押下して、動かしてみましょう。
起動したときには以下の画面になるので、入力箇所に先ほど登録したデバイスIDを入れて、「DeviceToken取得」を押下してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/245399/8222e062-2d7c-6963-0514-44c2beff9722.png)

正しく登録できていればmainに移動できます。
「マイク」を押下している間、マイク入力が可能になるので話しかけてみてください。
「送信」の左にあるブロックに入力して「送信」を押下しても会話ができます。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Live2Dモデルとのお喋りを実現した。 <a href="https://t.co/5FLXzlINEd">pic.twitter.com/5FLXzlINEd</a></p>&mdash; nori (@nori0__) <a href="https://twitter.com/nori0__/status/1221470932365037568?ref_src=twsrc%5Etfw">January 26, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

上記はNO MATCHのメッセージを変えたりモデルの位置を変えたりしていますが、同じようにモデルがリップシンクして音声が流れてくれると思います。

私の滑舌が残念で、上手く答えてくれないときもありますが、ノンプログラミングで音声入出力をしてくれるのはかなり楽でいいなと思います。フローチャートで作るので、会話の抜け漏れなく整理して使えそうなのも良さそうです。
ただ、ドコモAIエージェントAPIは非商用利用のみ無料で使えるとのことです。詳しくは 公式HP( https://docs.sebastien.ai/ )でご確認ください。

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

# 参考
[ドコモAIエージェントAPIを使ってキャラクターと会話する](https://qiita.com/broken55/items/5cdda8366aa2b6fa6fc0)