OculusQuestでXR Mecanim IK Plusを使用してユニティちゃんを動かしてみる

# はじめに
XR Mecanim IK Plusというアセットを使用してOculusQuestでユニティちゃんを動かしてみます。
![com.oculus.vrshell-20191120-222330_Trim_300x300_fps10.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/beeccd8b-a3b2-de51-686a-96db13d2f2cd.gif)

[XR Mecanim IK Plus]
(http://chobi-glass.com/Unity/XR_MecanimIKPlus.html)
XR Mecanim IK Plus 作者さんのページです。

[unity-chan offical website]
(http://unity-chan.com/)
ユニティちゃんのページです。

XR Mecanim IK Plusに含まれているデモシーンは、UnityのVRサポート機能を使用しているので、Oculus Integrationなしで動作させることができます。
また、いくつか設定を変更することで、スクリプトを修正することなしにOculus Integrationでも動作させることができます。

#開発環境
Unity 2019.2.11f1
XR_MecanimIKPlus.unitypackage
UnityChan_1_2_1.unitypackage
Oculus Integration for Unity - 1.42

#ビルド手順
1. 3Dで新規プロジェクトを作成します。
2. Build Settings から Platform を Android に Switch Platformします。
3. "XR_MecanimIKPlus.unitypackage"をXR Mecanim IK Plus 作者さんのページからダウンロードし、インポートします。
4. "UnityChan_1_2_1.unitypackage"をユニティちゃんのページからダウンロードし、インポートします。
5. Oculus Integrationを使用しない場合は、プロジェクト内の"SettingFiles.zip"を解凍し、"InputManager.asset"と"ProjectSettings.asset"を上書きします。その後、デモシーンを開くと動作させることができます。ビルドする場合は手順9を実施します。
6. Oculus Integrationを使用する場合は、手順5は実施せずOculus Integrationをアセットストアからダウンロードし、インポートします。
7. デモシーンに配置されている[XR CameraRig]は無効にして、代わりにOVRCameraRigを配置し、以下写真のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/93bdce0a-b182-ebc6-4ddb-786ab2eb39ce.png)
8. unitychan_VRAvatarを以下写真のように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/6ad671dc-2be5-9599-6110-5e7ee282d119.png)
8. ビルドする際の設定は、以下写真のようなOculusQuest向けのいつもの設定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/9c135bdb-d318-b077-84da-fc8a0d01aeab.png)

#追記1
[Oculus TouchでUnityちゃんの指を動かして遊ぼう]
(http://eyln.hatenablog.com/entry/2016/12/19/003435)
n_ryotaさんが公開されているスクリプトを使うとこんな感じで動かせます。
![com.oculus.vrshell-20191120-225350_Trim_300x300.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/b1ef08d6-3cfd-4597-ad9e-91d9fde3cb55.gif)

#追記2
[@yunagi_nagiさんが公開されている記事]
(http://eyln.hatenablog.com/entry/2016/12/19/003435)をみてDynamicBoneをつけてみたのですが、なぜか揺れません。
IK制御を外してエディタ上で動かしてみると揺れるので、IK制御と相性が悪い？

#追記3
当たり判定をつけたくてSAColliderBuilderを使ってみたところ、足の挙動がおかしくなります。
IK_Foot_Linkage_CS.cs内の地面を判定する処理Physics.Raycastで、追加したコライダーにあたっているためのようです。
Unityちゃんのレイヤー設定で"Ignore Raycast"を設定してあげると、とりあえずは回避できました。

#追記4
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">VRアプリを作りました<a href="https://t.co/76v9qDdkNh">https://t.co/76v9qDdkNh</a> <a href="https://t.co/wWiP4zMn7Q">pic.twitter.com/wWiP4zMn7Q</a></p>&mdash; 高浜 (@SatoshiTakahama) <a href="https://twitter.com/SatoshiTakahama/status/1201088616723705856?ref_src=twsrc%5Etfw">December 1, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

#追記5
位置によっては顔の内側にカメラが入ってしまって周りが見えなくなる対策として、カメラのレイヤー設定してみました。
[@Raspberlyさんが公開されている記事](https://qiita.com/Raspberly/items/54556df00088d0db90e4)を見て、カメラに映る対象をレイヤーで制御できることに気が付いたので、この機能を使えば対策としてよさそうと思い試してみました。
Unityちゃんの場合、Character1_Head以下の階層にレイヤー設定して対象外にするとちょうどよい感じになりました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215278/55a99187-4416-1c94-b5a6-806a21588517.png)


#ライセンス表記
<div><img src="http://unity-chan.com/images/imageLicenseLogo.png" alt="ユニティちゃんライセンス"><p>この作品は<a href="http://unity-chan.com/contents/license_jp/" target="_blank">ユニティちゃんライセンス条項</a>の元に提供されています</p></div>