Unityちゃんとお話できるアプリ作ってみた

はじまりは1つの記事から。

[リクルートがAIをまさかの無料公開。さっそくすべてのAPIを試しまくってみた](https://bita.jp/dml/recruit_artapi_)

リクルートがAIを無料で公開したそうです。

[公式サイト](https://a3rt.recruit-tech.co.jp/)

色々できそうだな〜とサイトを眺めていると、
「Talk API」という字面が目に飛び込んできました。

> Talk APIはChatbotを作成するためのAPIです。 Recurrent Neural Network(LSTM)を用いた入力文からの応答文生成による日常会話応答機能を提供します。 Talk APIを活用したChatbotによって様々なアプリケーション上でユーザとの対話を自動化し、 どのようなタイミングにおいても即座にユーザからの問いかけに対して応答することができます。([Talk APIのページ](https://a3rt.recruit-tech.co.jp/product/talkAPI/)より引用）

ここで、

「あれ？これ使えば女の子と会話できるんじゃね？」

と思いつく。

公式サイトのリクエストパラメータやレスポンスフィールドを見ていると、
「この前Unityでデータ送受信できたし、UnityでこのAPI使えるんじゃね？」
と思う。

そして、「せっかくUnity使うんだから、Unityちゃんと会話するアプリを作ってみよう！」
と思い立って、1日ぐらいで作ってみました。

あれから月日は経ち、このアプリも改良を重ね、ついにWindows・Macアプリになりました。

~~**ダウンロードは[こちらから](http://ll.la/DcwEK3)**~~

~~ぜひ、使ってみてください。~~
~~寂しいときや暇なときにはオススメだと思います。~~

**現在公開停止しております。申し訳ありません。**

# ざっくり処理説明
1. 言葉を入力して「会話する」ボタンを押すと、Unityがdocomo自然対話APIにリクエストを投げます。
2. docomo自然対話APIからUnityにレスポンスが返ってきます。
3. 返答内容を表示します。
4. レスポンスデータのうち返答内容をdocomo音声合成APIに投げます。
5. Unityちゃんが喋ります。

こんな感じです。

# 使ったもの
* Unity
* docomo自然対話API
* docomo音声合成API


# 動作確認済環境
- Windows7
- MacOS10.13

# 更新履歴
## 2018/7/29 
- 諸処の事情でWebGLからWindows・Macアプリに変更
- [docomoの自然対話API](https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=natural_dialogue&p_name=api_usage_scenario)に対応
- Unityちゃんが会話に反応してアニメーションするようになった

## 2017/7/5 Ver1.5
- Unityちゃんが動くようになった
- 「会話するボタン」を押さなくても会話できるようになった
- 会話したときUnityちゃんに表情がつくようになった

## 2017/6/16 Ver1.4
- Unityちゃんが音声合成で喋るようになった
- Unityちゃんの最初の言葉が、時間帯で変わるようになった

音声合成には、docomoの[音声合成API](https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=text_to_speech&p_name=api_reference)を使用しています。

## 2017/6/1 Ver1.3
- UnityちゃんをSDから3Dにした
- 家具アセットを削除（必要性を感じなかったのと、軽量化のため）
- 音声認識対応（GoogleChromeのみ）

### 音声認識のやり方
「音声認識」をクリックしてチェックをつけると、音声認識モードになります。
![スクリーンショット 2017-06-01 20.43.24.png](https://qiita-image-store.s3.amazonaws.com/0/154305/1a8562eb-4250-61e1-4617-ec631ee40be9.png)

「許可」を押すとマイクが使えるようになります。
![スクリーンショット 2017-06-01 20.18.51.png](https://qiita-image-store.s3.amazonaws.com/0/154305/98af0e51-d9da-b29d-a826-af2ad450be5c.png)

あとは、マイクに喋れば音声が認識されてUnityちゃんからの返答がきます。

※何回か喋って反応がない場合は、お手数ですが「テキスト」にチェックをつけてからもう一度「音声認識」にチェックをつけてください。

音声認識には、[Web Speech API](https://developer.mozilla.org/ja/docs/Web/API/Web_Speech_API)を使用しています。

参考：http://kesin.hatenablog.com/entry/2013/08/27/Web%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AB%E9%AB%98%E6%A9%9F%E8%83%BD%E3%81%AA%E9%9F%B3%E5%A3%B0%E8%AA%8D%E8%AD%98%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8BWeb_Speech_API

## 2017/5/24 Ver1.2
- APIをTalkAPIから[docomo雑談API](https://dev.smt.docomo.ne.jp/?p=docs.api.page&api_name=dialogue&p_name=api_usage_scenario)に変更

これにより、会話文の中に「ニュース」が入っているとニュースを話してくれるようになり、「しりとり」が入っているとUnityちゃんとしりとりで遊べるようになった。

## 2017/5/19 Ver1.1
![スクリーンショット 2017-05-19 17.27.49.png](https://qiita-image-store.s3.amazonaws.com/0/154305/21d4e627-b31f-a1c2-8d11-e2f26502e89b.png)

- 外観をお部屋っぽくした（家具の配置は適当）
- 話してる感が出るようにUnityちゃんを近づけた
- 返答時に簡易なリップシンク（口パク）をするようにした
- その他細かい修正

# 使い方

![スクリーンショット 2018-07-29 11.33.03.png](https://qiita-image-store.s3.amazonaws.com/0/154305/5b37fb7a-8be0-9231-89b6-2bf8e55d7234.png)

この画面が出たら、水色の枠に会話内容を入力します。

次に「会話する」ボタンを押すとUnityちゃんから返答がきます。
![スクリーンショット 2018-07-29 11.35.30.png](https://qiita-image-store.s3.amazonaws.com/0/154305/1517feab-3152-eea5-aac5-e33e6862f8d9.png)

説明は以上です。
また、「しりとり」と入力して会話するとしりとりゲームで遊べます。
![スクリーンショット 2018-07-29 11.37.29.png](https://qiita-image-store.s3.amazonaws.com/0/154305/49c33192-9dc3-e164-e975-332d32add9df.png)

「○○調べて」や「○○について調べて」と入力して会話するとUnityちゃんがWikipediaから単語の意味を説明してくれます。
![スクリーンショット 2018-07-29 11.41.19.png](https://qiita-image-store.s3.amazonaws.com/0/154305/e179be10-d85b-18e7-47e2-b5210b4f557f.png)

Unityちゃんといろいろ会話して楽しんでいってくださいね！