ARを使ってUnityちゃんと（拡張）現実で会話してみた＆ソースコード公開

[Unityちゃんとお話できるアプリ作ってみた](https://qiita.com/kanatano_mirai/items/ecb826b06c658bf350a8)
これを完成させた僕は、ある日ふと思いつきました。

**「ARを使えば、2次元の女の子と（拡張）現実で会話できるのでは！？」**

と思い、上記のアプリをARに対応しようとしました。
そして完成したのがこちら。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">ユニティちゃんが僕の部屋に来たから、ちょっとお話してきた！(๑&gt;◡&lt;๑)<a href="https://twitter.com/hashtag/unitychan?src=hash&amp;ref_src=twsrc%5Etfw">#unitychan</a> <a href="https://t.co/Zg4k4hDDDD">pic.twitter.com/Zg4k4hDDDD</a></p>&mdash; カナタ (@kanatano_mirai) <a href="https://twitter.com/kanatano_mirai/status/894540736946774016?ref_src=twsrc%5Etfw">2017年8月7日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

残念ながらあまり評価されませんでしたが、このまま闇に葬ってしまうのはもったいないので、このアプリの仕組みやソースコードを公開します。

# 開発環境
- MacBook Air
- Unity5.6.3p2
- Xcode8.3.3
- iPhone5S(iOS10.3.3)
- [KudanAR](https://www.kudan.eu/)

#動作確認済み環境
- iPhone5S(iOS10.3.3、iOS11.2.2)

# アプリの仕組み
![sikumi.001.jpeg](https://qiita-image-store.s3.amazonaws.com/0/154305/a9373dce-5ff7-1301-e8a6-fd921192ce13.jpeg)　　

1.　KudanARでUnityちゃんを拡張現実に出す
2.　iPhoneのマイクで音声を受け取る
3.　その音声データをdocomo音声認識APIに渡す
4.　結果を雑談対話APIに渡す
5.　結果をdocomo音声合成APIに渡す
6.　Unityちゃんの返答として音声を流す

基本的にdocomoのAPIを活用したつくりになっています。

# ソースコード
https://github.com/kanatanomirai/UniFrie

# アプリを使えるようにするために
以下の手順通りに進めて行けば、アプリを使えます。

## 1. Unityをダウンロード・インストールする
[Unity公式](https://unity3d.com/jp/unity/qa/patch-releases/2017.2.0p3)からUnity2017.2.0p3エディターをダウンロードし、インストールします。[^1]
[^1]: 2018年2月時点最新版（2017.3)での動作は未確認です。

## 2. Xcodeをダウンロード・インストールする
App StoreからXcodeをダウンロードし、インストールします。

## 3. unitypackageファイルをダウンロードする
[こちら](https://drive.google.com/file/d/1Jwj9Jz3ITZmDaFkh2kfxaLAU6xUAhcbq/view?usp=sharing)からunitypackageファイルをダウンロードします。

## 4. APIキーを取得する
[docomo Developer support](https://dev.smt.docomo.ne.jp/)のサイトから、音声認識API、雑談対話API、音声合成API、3つのAPIキーを取得します。

docomo Developer supportのアカウントを登録後、マイページから新規API利用申請をしてください。
![スクリーンショット 2017-11-08 10.33.29.png](https://qiita-image-store.s3.amazonaws.com/0/154305/2a52eab8-9475-44ab-b5f7-7697f9905d24.png)

次にアプリケーション登録を行います。入力項目に関しては、適当に入れても問題ないです。

次に使用するAPI機能を選択します。雑談対話、音声認識、音声合成にチェックを入れるのですが、音声認識APIはアドバンスト・メディア、音声合成APIはエーアイを選択してください。
![スクリーンショット 2017-11-08 10.38.27.png](https://qiita-image-store.s3.amazonaws.com/0/154305/863af0e1-2aee-bd5e-5980-0daf755c5e14.png)

最後に入力内容を確認し、利用申請をします。
成功すると、マイページにAPIキーが表示されています。
![スクリーンショット 2017-11-08 11.03.25.png](https://qiita-image-store.s3.amazonaws.com/0/154305/8b63a4bf-5d2b-104b-ca30-ba79a45581c1.png)

ちなみに雑談対話APIについては、リクルートの[TalkAPI](https://a3rt.recruit-tech.co.jp/product/talkAPI/)も使えます。
TalkAPIを使う場合は、APIKEY発行ボタンを押してメールアドレスを入力すればAPIキーが送られてきます。

### 注意！
アドバンスト・メディアの音声認識APIは、約3ヶ月でAPIの使用期限が切れてしまいます。そのため、期限が切れるとUnity内でエラーが出ます。
使用期限が切れたら、再度APIを取得し直してください。


## 5. Unityの設定をする
Unityを起動して、Unityの設定を行います。

### 5.1 パッケージインポート
Unityの新規プロジェクトを作成したら、UnityメニューバーのAssets→Import Package→Custom Packageを選択し、ダウンロードしたunitypackageファイルを選択し、パッケージをインポートします。

次に、Assetsフォルダの中にある「UniFrie」をダブルクリックしてシーンを開きます。

### 5.2 APIキーの追加
Assetsフォルダからscript→Parameterをダブルクリックし、プログラム中のAPIキー変数にAPIキーを追加します。
また、TalkAPIを使う場合は``` type ```に```InputText.TextTypes.TalkAPI ```を、docomoAPIを使う場合は``` type ```に```InputText.TextTypes.DocomoAPI ```を設定します。

```C#:Parameter.cs
// 音声認識APIのAPIキー
public static readonly string recognizeAPIkey = "ここにAPIキーを追加";
// 雑談対話APIのAPIキー
public static readonly string talkAPIkey = "ここにAPIキーを追加";
// 音声合成APIのAPIキー
public static readonly string compositionAPIkey = "ここにAPIキーを追加";
// API種類(TalkAPI、DocomoAPI)
public static readonly InputText.TextTypes type = InputText.TextTypes.DocomoAPI;
```

### 5.3 kudanのAPIキー設定
[Development License Keys](https://kudan.readme.io/docs/development-license-key)から、KudanAR用のKeyをコピーします。

そして、HierarchyでKudan Cameraを選択し、Inspectorタブ中にあるAPI Keyに先程コピーしたKeyを貼り付けます。
![スクリーンショット 2018-02-06 9.11.42.png](https://qiita-image-store.s3.amazonaws.com/0/154305/49b3d03f-feac-89b9-2a0c-f762726ab391.png)

### 5.4 ビルド設定
メニューバーのFile→Build Settingを選択し、出てきたウィンドウにあるPlatformをiOSにしてSwitch Platformを選択します。

次にPlayer Settingを選択し、Inspectorタブ中にあるIdentification→Bundle Identifierに「eu.kudan.ar」と入力します。

次にConfiguration→Camera Usage DescriptionにiPhoneのカメラを使う際に出るメッセージを入力します。これは適当で良いのですが、特に思いつかない場合は「Use Camera」としておきます。


以上全てを設定したら、Build SettingsウィンドウにあるBuildを選択してビルドを開始しましょう。

## 6. Xcodeの設定をする
ビルドで出来たフォルダ中の.xcodeprojファイルを開いてXcodeを起動します。

メニューバーのXcode→PreferencesからAccountsタブを開き、左下の＋を押してAppleIDをXcodeに登録します。

登録したら、Xcode内のGeneralタブ→Signing→Teamに自分のAppleIDを設定します。

次に、BuildSettingタブ→Build Opsions→Enable BitcodeをNoにします。
探すのが面倒なので、検索窓に「bitcode」と入れたほうが良いです。
![スクリーンショット 2017-11-06 16.57.14.png](https://qiita-image-store.s3.amazonaws.com/0/154305/f5fd0615-758b-12c4-f35f-99dda7d8aa8a.png)

## 7. 動作確認
MacとiPhoneをケーブルで繋いで、Xcodeでビルドします。左上にある▶を押すとビルドできます。
Build Successと表示されたら成功ですが、その後このようなメッセージが出ます。
![スクリーンショット 2017-11-04 15.02.32.png](https://qiita-image-store.s3.amazonaws.com/0/154305/5bc19546-713b-af91-c8d7-f0338caae3d2.png)

これが出たら、iPhone側で設定→一般→プロファイルとデバイス管理と行くと、デベロッパAPPにAppleIDのメールアドレスがあるので、これをタップして信頼します。
その後、生成されたアプリを実行すると、iPhoneカメラの映像が出てきます。

左下のボタンを押すと、UnityちゃんがARとして出てきます。
![s_IMG_0786.PNG.PNG](https://qiita-image-store.s3.amazonaws.com/0/154305/55d1c568-43ef-258c-bff1-d2139bfdf1d6.png)

右下のボタンを押しながらiPhoneのマイクに話すとUnityちゃんから返答がきます。
![s_IMG_0787.PNG.PNG](https://qiita-image-store.s3.amazonaws.com/0/154305/24594e71-d1e1-4cfd-4389-3acd5336a590.png)

それと、docomo雑談対話APIの仕様ですが「ニュース」と話すと最近のニュースを返答してくれます。
![s_IMG_0789.PNG.PNG](https://qiita-image-store.s3.amazonaws.com/0/154305/29c983c7-deea-b822-d773-c2165ccccf39.png)

また、「しりとり」と話すとしりとりで遊べます。
![s_IMG_0790.PNG.PNG](https://qiita-image-store.s3.amazonaws.com/0/154305/a00a08f2-f2f2-25a0-4d23-c8ec51fc0449.png)

ハッキリ話さないとうまく単語を認識してくれません……。
![s_IMG_0791.PNG.PNG](https://qiita-image-store.s3.amazonaws.com/0/154305/1dd3a14b-891b-0734-a71c-ae5b8d61847d.png)

![s_IMG_0792.PNG.PNG](https://qiita-image-store.s3.amazonaws.com/0/154305/3987a1e2-9536-1842-1fff-215e938c0fd8.png)

この画像でも出ましたが、Unityちゃんは話しかけるとランダムでポーズをとったり表情が変わったりします。

## 上手く動かない場合
###エラーが出てビルドできない
![スクリーンショット 2017-11-06 17.03.54.png](https://qiita-image-store.s3.amazonaws.com/0/154305/ac0f564c-dbed-3338-e6bd-aefcd2163c83.png)

このようなエラーが出る場合は、Generalタブ→Identity内のBundle Identifierに**他人と被らない独自の名前**を入力します。
参考リンク
[バンドルID(Bundle identifier)とは](https://qiita.com/miyamotok0105/items/f24a4e10a2877ae70bc4)
[初心者のためのbundle identifier(独自ドメイン)の設定とUnity上でのトラブル](https://qiita.com/otochan/items/1e30cc9312a9d95035ec)

ビルド後Xcodeを終了し、もう一度Unity側でビルドをします。

その後、XcodeのGeneralタブ→Identity内のBundle Identifierを見ると、eu.kudan.arが入っているかつエラーが消えていることが確認できます。
この状態でもう一度Xcodeでビルドをしてください。
そうするとアプリが2つになってしまうので、古い方は消してください。

## アプリを編集したい場合
このアプリの編集は自由にしてもらってかまいません。新機能などを追加しちゃってもOKです。
ですが、このアプリをUnity上で編集するには、KudanのUnity Editor Keyを取得しなければなりません。

以下のサイトからKudanのアカウントを作成します。
https://www.kudan.eu/login/

アカウントにログインして「Request Unity Editor Key」を選択すると、Editor　Keyが出てきます。
![スクリーンショット 2017-11-07 15.24.26.png](https://qiita-image-store.s3.amazonaws.com/0/154305/ab6687e5-df7f-bd16-5916-916b84ee356f.png)

このEditor Keyを、Kudan Camera内にあるEditor API Keyに入力します。
![スクリーンショット 2017-11-07 16.10.40.png](https://qiita-image-store.s3.amazonaws.com/0/154305/1996fd1e-1ccf-837a-871b-f7b3fb8dd33c.png)

これで、アプリの編集ができるようになります。

ご質問などがあれば、お気軽にコメントしてください。