Unity＋Vive＋MMD＋VRIKで、キズナアイちゃんになりきりVR

# 使用したモノ

- Unity 5.5.0p3
https://unity3d.com/jp/unity/qa/patch-releases?version=5.5
- HTC Vive
https://www.vive.com/jp/product/
- MMD4Mecanim（Traffic Jam様の使用手順まとめ→）
http://milk0824.hatenadiary.jp/entry/2016/06/06/224831
- キズナアイちゃん（MMDモデル）
http://kizunaai.com/download.html
- FinalIK（VRIK）
https://www.assetstore.unity3d.com/jp/?#!/content/14290

・・うーん、この時点で結構準備が大変ですね；

![AI.png](https://qiita-image-store.s3.amazonaws.com/0/140889/20dce5c9-28f7-0ae5-746b-d56da40a94d5.png)


今回、初めてQiitaの記事を書かせて頂きます、はるねずみと申しますm(_ _)m

企画職が本業でして、VR関連事業でディレクター兼プロデューサー兼レベルデザイナー・・的な感じですｗ
これからもノンプログラマーでどこまでVRコンテンツが作れるか！？ に挑戦していきたいと思います。

そして時は2017年・・VRコスプレイヤーとして名を馳せつつある【青木そらす】さんを筆頭に、
色んな方がVRIKを使ってMMDキャラになりきりVRを堪能されておりまする！

僕もとある案件でMMD＋VRIKでキャラを動かす必要が出て参りまして・・

そのままMMDを読み込み、ただVRIK対応しただけじゃあ、なかなか良い感じにならなかったので備忘録として記事にさせて頂きます！


今回のこの記事を書くにあたり、VRIKの情報をくれた素敵なVR勢の皆様に感謝しますm(_ _)m

　・青木そらす さん https://twitter.com/open_sorasu
　・n_ryota さん https://twitter.com/n_ryota
　・meka さん https://twitter.com/kikatyan
―――――　―――――　―――――

## 挙動確認用の動画

[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/CMHrxe5pbQA/0.jpg)](http://www.youtube.com/watch?v=CMHrxe5pbQA)

## 大まかな手順

※Viveセットアップ済み、MMD4MecanimでMMDキャラもインポート済み　の前提で進めます。
　（分からない場合は、前項「使用したモノ」のリンク通りにやれば問題なくいけると思います）

- ①Viveの CameraRig 以下の階層に、HeadTarget、LArmHandTarget、RArmHandTarget を設定
- ②VRIKスクリプトをMMDキャラにアタッチ後、各TargetとReferences を指定
- ③VRIKスクリプトの、Solverの各値を調整
    - SpineとLocomotion
    - Left LegとRight Leg

―――――　―――――　―――――

### ① Viveの CameraRig 以下の階層に、HeadTarget、LArmHandTarget、RArmHandTarget を設定

・まず、SteamVR > Prefabs > CameraRig の階層下に、キズナアイのキャラモデルを配置します。
![001.png](https://qiita-image-store.s3.amazonaws.com/0/140889/f00cc469-bb97-2a25-b69f-d16cc9b79a13.png)

・次に、左右のコントローラと、Camera (eye)以下に、頭と手の位置を連動させる用の空オブジェクトを配置します。
![002.png](https://qiita-image-store.s3.amazonaws.com/0/140889/2a59c3b5-b772-9aea-0ddf-499cebddfcd3.png)

・ここで注意したいのが、各Targetオブジェクトのローテーションの値です。
　※FinalIKにデフォルトで入っているキャラモデル、Pilotさんの各Targetの値とはかなり異なりました。
　【左手の値↓】
![003.png](https://qiita-image-store.s3.amazonaws.com/0/140889/2dad6f70-7631-5160-d855-7c4270da2bcf.png)

　【右手の値↓】
![004.png](https://qiita-image-store.s3.amazonaws.com/0/140889/1e30737e-eecd-f93a-aeba-a064ce476107.png)

　【頭の値↓】
![005.png](https://qiita-image-store.s3.amazonaws.com/0/140889/e0fc0988-db06-c28b-909e-1d64be7dc367.png)

あと、ここでついでに調整しとくと良いのが、カメラのニアクリップの値です。
（キャラの身体にカメラが埋もれたりするため。0.05くらいで良さげ↓）
![000.png](https://qiita-image-store.s3.amazonaws.com/0/140889/8383806d-0619-c7dc-dd34-6a603e2ecdc4.png)

―――――　―――――　―――――

### ②VRIKスクリプトをMMDキャラにアタッチ後、各TargetとReferences を指定

・キズナアイちゃんにVRIKスクリプトをアタッチした後、Solver > Spine > Head Target に、先ほどCameraRig以下に配置した頭連動用のオブジェクト HeadTarget を指定します。
![008.png](https://qiita-image-store.s3.amazonaws.com/0/140889/ed5eebcf-6c74-f669-ebc9-9da509bc33a8.png)

・同様に、Left Arm に LArmHandTarget、Right Arm に RArmHandTarget を指定。

・指定できたら次は、Referencesを開き「Pelvis」に「Root」を指定します。
　基本的にはVRIKスクリプトをアタッチした時点で、自動で全て指定してくれるのにPelvisだけNG・・・
　※MMDキャラモデルでは、Rootを指定しないとしゃがんでくれないようで・・ここで躓きました；
![009.png](https://qiita-image-store.s3.amazonaws.com/0/140889/3bc3587c-8b43-0a9d-b0e0-fdae0ce7a8d4.png)

また、Left Toes と Right Toes が none になっているので、それぞれLeftFootTip、
RightFootTip を指定。
―――――

ここまで設定すると、もうVR内でキズナアイちゃんになって動き回ることが出来ます！

ただ、足の動きがまだ不自然だったりするので、次項でその辺りを調整していきます。

―――――　―――――　―――――

### ③VRIKスクリプトの、Solverの各値を調整

- SpineとLocomotion

　【Spineの値↓】　※主に腰より上の挙動の設定
　【Locomotionの値↓】　※歩行時の足踏みなどの設定
![011.png](https://qiita-image-store.s3.amazonaws.com/0/140889/b6f70871-3162-0f8f-9344-197e5720b4e7.png)

　※ジャンプできるようにする場合は、Plant Feet のチェックを外します。

僕はこんな感じで設定しましたが、もっと良い感じに設定できたぜ！？って方はご一報頂けると助かりますｗ

- Left LegとRight Leg

　【両足のSwivel Offsetの値↓】　※股の開き具合の設定
![010.png](https://qiita-image-store.s3.amazonaws.com/0/140889/a82c944e-925c-9d4d-e28e-b1d2fd2a6b0f.png)


尚、手も同様にSwivel Offsetを設定できますが、デフォのままでも問題ない感じでした。
モデルによっては、手も調整した方が良い感じになるかもしれないです。

―――――　―――――　―――――

# まとめ

・取り急ぎ、設定や調整の部分をSSでざっと記事にしましたが、ここまでやれば割とスムーズな横移動や回転時の足挙動になると思います。
（本当はもっと良い感じにしたいところだけど・・ｗ）