これから VR アプリケーションを開発する時に知っておくべきこと 10 選

## はじめに
7 月に Unity で VR アプリケーション開発することをやめ、 Python や Rails の世界に入りました。
VR 開発の進化のスピードは非常に早く、ここに書くノウハウはすぐに古い情報になると思います。既にもう古いものもあるかもしれません。
ですが、これから VR を開発される方が少しでもラクに開発できればと思い、 2 ヶ月前の記憶を辿って記事にしておきます。

## 1. ユーザー間コミュニケーションの実装
[Photon](https://www.photonengine.com/ja/PUN) が手軽。スケールできるまでは無料で使える（20人同時接続まで無料）。
* 価格: [Photon Pricing](https://www.photonengine.com/en-US/Realtime/Pricing#plan-20)
* [Asset Store](https://www.assetstore.unity3d.com/jp/#!/content/12080) にライブラリあり
* 音声通信は [PUN Voice](https://doc.photonengine.com/ja-jp/voice/current/getting-started/voice-for-pun)

![スクリーンショット 2017-09-17 21.45.46.png](https://qiita-image-store.s3.amazonaws.com/0/19698/eae2b546-2789-520e-3a4f-6cd04bd08dbd.png)


## 2. アバターを動かす
自前で IK を実装するのは大変です。まずは [Final IK](https://www.assetstore.unity3d.com/jp/#!/content/14290) を使いましょう
<iframe width="560" height="315" src="https://www.youtube.com/embed/mNvtZCboy7w" frameborder="0" allowfullscreen></iframe>

Oculus Rift / Oculus Touch や Vive Controller の位置を Final IK の頭や手の位置と紐付けると、自分の動きが VR 空間上で再現できる。

![スクリーンショット 2017-09-17 21.06.49.png](https://qiita-image-store.s3.amazonaws.com/0/19698/9e8eaefb-de24-d83b-1656-7a028ad5a1e1.png)



## 3. 一人称の移動
視線を定速や加速をかけて移動させると VR 酔いにつながるため、テレポートが主流。
参考記事: [HTC ViveでThe Labのような瞬間移動の実装](http://blog.cluster.mu/2016/07/how_to_move_teleportation/)

HTC Vive の The lab のように放物線で移動先を選択させると、極端に遠いところに移動することもなくユーザー体験も良い。

## 4. VR 空間のメニュー
常にどこかにメニューが見えていると邪魔です。腕時計をメニューにしましょう。
![Facebook Spaces](https://cdn-images-1.medium.com/max/2000/1*79D9dWyUhvmcDjgIwqLP8A.jpeg)


## 5. 声から口の形を推定したい
アバターコミュニケーションをする時に口の動きは大切です。[OVRLipSync](https://developer.oculus.com/downloads/package/oculus-ovrlipsync-for-unity-5/) を使いましょう。

https://www.youtube.com/embed/vk0FypceXJw
![スクリーンショット 2017-09-17 21.51.07.png](https://qiita-image-store.s3.amazonaws.com/0/19698/498ddc7f-4e94-536b-c04d-967862985b2c.png)


## 6. 触覚フィードバック
ものに触れた時、人に触れた時には触覚フィードバックを。

* Oculus では OVRHaptics
* HTC Vive では device の [TriggerHapticPulse](http://cycling.hateblo.jp/entry/2016/03/26/010232)

で実装。


## 7. 音声は 3D サウンドで表現
Unity の AudioSource で簡単に設定できます
![Audio Source](https://docs.unity3d.com/ja/540/uploads/Main/AudioSourceInspector.png)
参考: https://docs.unity3d.com/ja/540/Manual/class-AudioSource.html

## 8. Facebook や Twitter へのソーシャル拡散
これが結構面倒だった。
ブラウザには [Embedded Browser](https://www.assetstore.unity3d.com/jp/#!/content/55459)を使い、Collider を設定してタッチでスクロールやタッチができるようになるといい感じ。タブレッドデバイスのように操作できる。キーボードは別途実装して、キータッチを Browser 側のクラスに投げてインプットできるようにする。

認証は面倒なので [シェアURL](http://qiita.com/takuhito-h/items/891f3d53ad14a1182963) で認証無しで乗り切る。


## 9. 動画撮影・録画・再生
撮影・録画は [RockVR](https://www.assetstore.unity3d.com/jp/#!/search/page=1/sortby=popularity/query=publisher:24830) のプロジェクトが無料で優秀。
* [Video Capture](https://www.assetstore.unity3d.com/jp/#!/content/75653)
* [VR Capture](https://www.assetstore.unity3d.com/jp/#!/content/75654)

![スクリーンショット 2017-09-17 21.54.57.png](https://qiita-image-store.s3.amazonaws.com/0/19698/f8d60a71-77a1-ec10-ef7e-9e7081fb792b.png)


再生は [UMP](https://www.assetstore.unity3d.com/jp/#!/content/49625) が良かった。


## 10. FPS
FPS は常に気にする。FPS が低いと VR 酔いにつながりやすいし、 Oculus は 90 FPS 以下だと申請も通らない。

* カメラの数は少なく
* ポリゴン数は少なく
* メッシュコライダーはできるだけ使わない
* ライトはできるだけベイクする
* 遠目の景色は Skybox で
* Asset bundle のロード時はローディング用のビューを見せ、カクつきを見せない

## まとめ
以上、他にも大事なことがいくつもあった気がするが、自分が詰まった部分や印象に残っている部分を抽出しました。
また、大事なことを思い出したら追記するかもしれません。