UnityとWatsonをつないで、VR空間でAIと会話できるようにしてみた

#**!!!注意!!! この記事は書きかけです。投稿日に間に合わず、申し訳ありません。**
本エントリーは<a href="https://qiita.com/advent-calendar/2017/bluemix">IBM Cloud Advent Calendar 2017</a>の25日目です。


#対象者
- Unityの基本操作がなんとなくわかる人
- IBM Cloudの基本操作がなんとなくわかる人
<br>※詳細な操作説明を割愛した箇所もございます。

#実施環境
- Window10 Home 64bit
- Unity 
    - Personal(無償版)
    - バージョン:2017.1.2f1<br />
    ※Unityを導入した2017年10月時点では、推奨バージョンが2017.1.xだったため。現在(2017年12月時点)では2017.2.x推奨だそうです。

#準備するもの
- Unity
    - Personalであれば無料で使用できます。
    - **2017年12月時点では、最新版は不具合が起こり得るため、過去バージョンの2017.2.x版を推奨**らしいです。過去バージョンは以下よりダウンロードできます。
<br />https://unity3d.com/jp/get-unity/download/archive?_ga=2.108028171.866438277.1514101729-615743042.1514101729
- IBM Cloudライトアカウント　<br />
    - 2017年11月よりライトが登場し、無料で使えるようになりました。それ以前にアカウント作成されていたものの持て余していた方は、新たなメールアドレスで再作成されるのがおすすめです。
- ネット接続したマイク機能付きのPC
<br />※ここではVR Ready(GTX1060以上)のノートPCを使用しましたが、VR用ヘッドセットにつなげずにPCのディスプレイ上で動きをみるだけであれば、通常のPCでも実施できると思われます。ただし、動きは悪い可能性大。


#心の準備
- IBM Cloudは、操作性においてもやっとするところがあります。私の経験上、**真面目に構えすぎず、こんなもんだとゆるりと付き合うのがよい**です。
    - 同じ画面でも、状況により表示が異なることがある。そのようなときは*「戻る」ボタンで戻って再度その画面に入りなおす*。(「価格プラン」が現れないなど)
    - 画面遷移が遅い。ときに、砂時計などの「待て」マークが現れたまま一向に進まないことがある。そのようなときは*「戻る」ボタンで戻ってあきらめる*。([管理]→[アカウント]→[リソースグループ]の部分など)
    - サービスの契約を結んだ後、その場ですぐに使用しておかないと、使用中サービス一覧が表示されるはずのダッシュボードに現れない。その場合、どこからサービスに入って使えばいいのか試行錯誤することも。。
- Unity
    - 現在のVR ReadyのPCを購入してからは問題ありませんが、やや古いDynabookのWindows8で操作していたときは、立ち上げやスクリプト表示など全般的に激遅でした。


#作業全体の流れ
**1. Watson SDKをUnityに入れ、UnityがWatsonを使えるようにする ＠Unity**
**2. しゃべる人物や動物を仮想空間に置く ＠Unity**
**3. チャットボット(会話マシン)に必要なサービスを無料契約する ＠Watson**
**4. チャットボットを作る ＠Watson** ←書きかけです。ごめんなさい。

#1. Watson SDKをUnityに入れ、UnityがWatsonを使えるようにする ＠Unity
1. watson-developer-cloudのunity-sdkをダウンロード。おそらく、その時々の最新版でいいと思います。https://github.com/watson-developer-cloud/unity-sdk/releases <br />

＝＝＝＝＝編集中につきひとりごと＝＝＝＝＝
**が、** 
現在(2017年12月)最新版である**v2.0.0で実施したところ、メニューバーに現れるはずのボタン(Configuration Editorなどの便利ボタン)が出ない**という現象が起きました。
調べたところ、v1.0.0以降では出なくなってしまったようです。
v1.0.0未満のWatson SDKを使用した記事はいくつかあり、このとおりにやった方が楽そう。。
けど、HoloLensにも対応もしているv2.0.0を使いたい…というわけで、現在対処法を確認中です。
(それもあってこの記事は未完成です。申し訳ありません)
＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝＝

2. ダウンロードしたフォルダを[すべて展開]で解凍。フォルダ構造は、[unity-sdk-x.x.x]の下に[unity-sdk-x.x.x]が入れ子になり、その中に[.github]や[Examples]フォルダなどの各部品が入るといった二重になる。入れ子になった[unity-sdk-x.x.x](直接部品が入っている方）を"Watson"にリネーム。
3. Unityを立ち上げる。新規にプロジェクト作成するため、立ち上がった画面で[Project name]を任意名にし、[Create Project]をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/d17dfeff-e814-fbd6-ea89-e5f10fa0a71f.png)
4. Unityが開いたら、"Watson"フォルダを、Unityの[Project]ペインの中にある[Assets]フォルダを目掛けてドラッグ&ドロップ。[Assets]フォルダの下に"Watson"フォルダができる。同時に、上のメニューバーに"Watson"ボタンができる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/e6df40c5-b6c6-0b3c-9aa3-c97deb13ed5f.png)



#2. しゃべる人物や動物を仮想空間に置く ＠Unity 
しゃべらせたい人物や動物を、UnityのAsset Storeから落としておく。ここでは、フリーのUnity-chanを使用。<br />

0.以降の説明でのUnityのレイアウト(見え方)は"Default"です。Unityに慣れていない方は、右上にあるボタンをクリックし、"Default"を選択しておいてください。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/74ff1597-39d4-55f3-5e88-7d7a16bacace.png)

1. アセットストアでUnity-chanをダウンロード
上部にあるメニューバーから[Window]→[Asset Store]でアセットストアを開き、検索窓に"unity chan"を検索。その後、[FREE ONLY]ボタンをクリックしておくと、無料の素材しか現れないので安心。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/965fd4cc-ea88-038d-86fc-8bcacf0a2a38.png)

2. 下にスクロールするといくつかUnity-chanが出てきているが、ここでは以下をクリック。ダウンロードページに遷移するので、[Import]をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/d4340717-6741-4817-684a-14a857b1a967.png)

3. しばらくすると以下の画面が出るので、デフォルトのまま[Import]をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/d08a1f82-5634-1dbe-d003-e45a82a1a262.png)

4. [Assets]フォルダの下に、"Watson"フォルダと並んで"UnityChan"フォルダが入りました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/75c5ef74-4c9b-48e2-234c-c2054b37517d.png)

5. 仮想空間での見え方(メインカメラの位置・向き)を調整する。左側の[Hierarchy]ペインの[Untitled]の下にある[Main Camera]をクリックすると、右側にある[Inspector]ペインにカメラの設定情報が現れるので、その中の上の方にある[Transform]項目内の右上にある歯車マークをクリックし、[Reset]を選択。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/91f58c5f-aa7a-4c2c-55ef-487acf7aceff.png)


6. [Project]ペインにて、[UnityChan]フォルダの中の[Models]フォルダを選択。右側に[Models]フォルダの中身が現れる。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/ff48c959-2566-126e-1a9b-fb803c783180.png)

7. フォルダの中身のうち"unitychan"という人型の絵を選択し、上にある[Scene]ペインにドラッグ&ドロップ。これで、仮想空間のシーンの中に会話をしてくれる人が登場するようになる。シーンに置かれたものは全て[Hierarchy]ペインに表示されるため、[Hierarchy]ペインにも"unitychan"が追加されている。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/5377bf91-9a2e-1b2e-b9c8-f3ef2f037e11.png)

8. "unitychan"が選択されたままの状態で、[Inspector]ペインにて、"unitychan"がカメラにうまく映り込むよう位置を修正する。
     [Transform]項目
    - [Position]：Y=-1, Z=1に変更
    - [Rotation]：Y=180に変更

9. [Game]ペインを開き、映り方を確認する。以下のようになっています。![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/d069d446-6446-8094-bba4-769970049c7f.png)

10. これでUnityちゃんのいるシーンができたので、[ctrl]+[S]キーを押して任意の名前を付けてシーンを保存する。


#3. チャットボット(会話マシン)に必要なサービスを作成(無料契約)する ＠Watson 

0.IBM Cloudのライトアカウントを取得されていない場合は、アカウントを新規作成してください。
ライトアカウント作成のわかりやすい記事を見つけました↓
https://qiita.com/KenichiSekine/items/249d2ff691b6565fb127
<br />
1. IBM cloudにログイン
https://console.bluemix.net

2. 初めてログインすると、以下の画面になります。(これからサービスを使用すると、この画面に作成済みのサービスが表示されるが、今は空っぽの状態。)右上の[カタログ]をクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/e6acd041-226a-6b8a-6b0f-ca6c48b8c16a.png)

3. 左端のウィンドウを下にスクロールし、[Watson]をクリック。(左側のリスト周辺にマウスをもってくるとスクロールバーが現れるという、わかりづらい仕様。。)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/e27d243f-83ec-4504-cc08-2a228264661d.png)

4. IBMの提供する機械学習(Watson)の一覧が表示される。ここでは以下3つのサービスを使用する。
・ Conversation：会話マシン(チャットボット)
・ Speech to Text：PCにしゃべりかけた音声を、テキストデータに変換(マシンに理解できる形にする)
・ Text to Speech：テキストデータを音声マイクより発声(マシンが出した返答を音にする)
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/b0363c3d-500b-f5f2-b98f-8bff9d70ecbc.png)
それぞれのサービスのアイコンをクリックし、入った画面でサービス作成(無料の利用契約)をする。いずれのサービス契約も同じ手順だが、以降ではConversationサービスに入った画面で説明。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/caa19775-9be8-ef1f-fb54-187c1e1382ff.png)

5.以下のような画面が開く。各項目の設定はデフォルトのままでOK。
※ライトプランでは[デプロイする地域/ロケーション]は米国南部のみとなるようなため、気にしなくて結構です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/7dc44ef3-e631-cc53-6bf2-8b87384800dd.png)

6.下の方にスクロールすると「価格プラン」が現れる。**タイミングにより「価格プラン」が現れないことがあるが、その場合は前の画面に戻りもう一度この画面に遷移すると、たいてい現れる様子。**(ここがIBM Cloudのもやっとするところ。。)<br />
「価格プラン」で"Lite"(無料)が選択されていることを確認し、[作成]ボタンをクリック。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/f08fa500-bf67-77b9-a939-cbd5611052db.png)

7.以下のような画面が開けば、無事に作成完了。
- [Conversation]の場合
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/d94f17e4-b926-8b75-4c63-d68af5cd632e.png)

- [Speect to Text]および[Text to Speech]の場合は以下のイメージ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/8012eacf-29e6-cfdf-b5c1-d483cd4d011e.png)

※[作成]ボタンを押すと以下のポップアップが現れる場合は、すでにサービス作成済のようです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/220253/5420c1c4-da86-a7f4-1454-6d20cb3e1e29.png)


#4. チャットボットを作る ＠Watson
ごめんなさい、まだ書けていません。


※すでにサービスを作成