自分で作った3DモデルをUnityとKinect v2を使って動かすまで

自分で作った3DモデルをUnityとKinectV2を使って動かすまでの一連の流れの覚え書き。
最終的には、ノーコードでできてしまい、Unityすごい。

---

基本は、誰かの記事を参考にしました。

まず参考にしたのは、以下の記事。
[2時間で3Dモデルを作ってUnityでアニメーションさせた](http://takashicompany.hatenablog.com/entry/2013/11/10/215814)

##STEP1.モデリング
内容：キャラクターをモデリングする。
使用ソフト：[Sculptris](http://pixologic.com/sculptris/)
Sculptrisは、ZBrushという3Dモデルの定番ソフトの体験版的な位置づけだそう。無料で手に入る。

操作は以下リンクや、Youtubeなど参考にしながら手探りで、粘土のようなものからとりあえず人型にした。
[【無料3Dソフト】sculptris（スカルプトリス）のチュートリアルまとめ - NAVERまとめ](http://matome.naver.jp/odai/2140547348220120101)

このときに、「T」ポーズをとらせていると後々都合がいい。
![12530784_1025508154183499_1261765925_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/64523/7d367bee-59a3-861d-d01e-6ec04a36763a.jpeg)

最後にこれを、.obj形式で書き出し。

---
##STEP2.ボーンの設定
内容：キャラクターにボーンを埋め込む。
使用ソフト：[Blendar](http://blender.jp/)（無料ダウンロード可）


ボーンの入れ方などは以下を参考にした。
[初心者のための！作って学ぶBlenderの基礎：④ボーンを設定する]
(http://nvtrlab.jp/column/2-4)
上記記事のボーンに名前をつけるくらいまでやる。

<img width="1096" alt="スクリーンショット 2016-02-28 18.32.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/64523/4ceebd15-b96c-bde7-ff86-e4609c5c5136.png">

アーマチュア（Armature）とは、それぞれの骨（ボーン）の全体を指す言葉とのこと。今後もよくでてくる。

最後にこれを、.fbx形式で書き出し。

---
##STEP3.UnityでのKinect環境セットアップ
内容：UnityでKinectV2を使う環境のセットアップ。
使用ソフト：[Unity](http://japan.unity3d.com/)（Personal版は無料ダウンロード可）
※OSは、Windows8以上必須

UnityでKinect V2を使うための環境をつくる。
以下の「6.1　Unityの基礎知識」まででOK。
[Kinect開発者のための、Unityの基礎知識とインストール - Build Insider](http://www.buildinsider.net/small/bookkinectv2/0601)


---
##STEP４-1.ユニティちゃんを動かしてみる
内容：Unityにキャラクターを読み込んで、Kinectで動かす。〜ユニティちゃん編
使用ソフト：Unity

まずは以下の記事の通り、「ユニティちゃん」をAsset Storeからダウンロードして、Kinectで動かしてみる。
手順に従ってやればすんなり成功。
[Kinectでユニティちゃんを動かす - Build Insider](http://www.buildinsider.net/small/bookkinectv2/0703)

ざっくりの手順は、
- .fbxをAssetsにドラッグアンドドロップしてインポート。
- Assetsに追加したモデルをSceneに追加。
- Sceneに追加したモデルを選択して、Inspectorウィンドウの「Rig」タブ内「Animation Type」を「Humanoid」にする。
- 「Configure...」ボタンをクリック
- 自動である程度、ボーンが設定されるが、赤くなっているところがあったら、手動で「T」ポーズになるように角度を調整する。
- Inspectorウィンドウで、ボーンのリンクが切れてるようなら、適宜リンクし直す。

上記記事で紹介されているScriptを追加し、ユニティちゃんはKinectで無事に動いた。

しかし、先ほどつくったオリジナルキャラをインポートすると、関節の軸がめちゃくちゃになって、コードの使い回しはできない。
回転軸の調整を、C#を書き換える必要がある。


---
##STEP４-2.オリジナルキャラを動かす
内容：Unityにキャラクターを読み込んで、Kinectで動かす。〜オリジナルキャラ編
使用ソフト：Unity

上記のユニティちゃん用コードを調整がなかなかうまくいかずにあーだこーだしていたらもっと簡単な方法があった。

以下を参考にした。
[KinectでMMDモデルを動かす話](http://www.kirurobo.com/2014/12/kinect-v2-with-ms-sdk.html)

上記で紹介されている以下のプラグイン（記事内はリンク切れの模様）を使ったら、一発で動いた。Examples入りかどうかで２種類ある。
[Kinect with MS-SDK]
(https://www.assetstore.unity3d.com/en/#!/content/7747)  (free)
[Kinect v2 Examples with MS-SDK](https://www.assetstore.unity3d.com/en/#!/content/18708) ($20)

自分は、この際なので、$20のexamples入りを買った。
（同じ作者から[Kinect v2 Animator](https://www.assetstore.unity3d.com/en/#!/content/51090)というモーションキャプチャ専用のもでているけど、使ったことないので、違いはわからず。）

ユニティちゃんのときと同様に、AvatarControllerなどをモデルにセットすると、今度はそのまま動いた。
![12748409_1701637286714640_1315012688_n.jpg](https://qiita-image-store.s3.amazonaws.com/0/64523/de3ad6e3-2244-3150-ab88-3e7952925061.jpeg)
<blockquote class="instagram-media" data-instgrm-version="6" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:50.0% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAAGFBMVEUiIiI9PT0eHh4gIB4hIBkcHBwcHBwcHBydr+JQAAAACHRSTlMABA4YHyQsM5jtaMwAAADfSURBVDjL7ZVBEgMhCAQBAf//42xcNbpAqakcM0ftUmFAAIBE81IqBJdS3lS6zs3bIpB9WED3YYXFPmHRfT8sgyrCP1x8uEUxLMzNWElFOYCV6mHWWwMzdPEKHlhLw7NWJqkHc4uIZphavDzA2JPzUDsBZziNae2S6owH8xPmX8G7zzgKEOPUoYHvGz1TBCxMkd3kwNVbU0gKHkx+iZILf77IofhrY1nYFnB/lQPb79drWOyJVa/DAvg9B/rLB4cC+Nqgdz/TvBbBnr6GBReqn/nRmDgaQEej7WhonozjF+Y2I/fZou/qAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div><p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;"><a href="https://www.instagram.com/p/BCDEg-EG0Y4/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none;" target="_blank">A video posted by yuyuyuyoyoyo (@yuyuyuyoyoyo)</a> on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2016-02-21T12:16:12+00:00">Feb 21, 2016 at 4:16am PST</time></p></div></blockquote>
<script async defer src="//platform.instagram.com/en_US/embeds.js"></script>

ちなみに上記記事の「2. MMDモデルの準備」で紹介されている「MMD4Mecanim」を使うと、MMDのモデルをUnityで使えるようになり、記事の通り、これらもKinectで動かすことができるので、ネット上で公開されている様々なモデルを使うことが可能ができる。

プラグインを使うと、結果的に、コードを一行も書くことなく実現できてしまった。

Unity（と、プラグイン作者様、記事を書いてくださった方々）すごい。