Posted at

worldspaceのcanvasを最前面にレンダリングする


VRにおいてScreenSpace-Overlayでは、UIの設定ができない

通常であれば、UIはあらゆるオブジェクトの最前面にレンダリングされるもので、UnityではUIをScreenSpace-Overlayで実現する。

しかし、VRにおいては、その仕様上目の焦点が合わないため実は設定ができない(できるがUIがレンダリングされない)

なので、World Spaceでの使用を推奨される。

https://unity3d.com/jp/learn/tutorials/topics/virtual-reality/user-interfaces-vr

しかし、このやり方だと、UIがworldspaceに置かれるため、他の3dモデルなどに遮蔽されて隠れてしまう問題もある。

UIをworldspaceに置きつつ、他のオブジェクトに遮蔽されることなく最前面にレンダリングする方法を以下にまとめた。


手順


  1. Main Cameraをduplicateして、UI Cameraにrename

  2. UI CameraをMain Cameraの子コンポーネントに指定

  3. UI CameraのClear FlagsをDepth Onlyに変更

  4. UI Cameraからaudiolister, flareLayerコンポーネントをremove

  5. UI CameraのCulling MaskにUIのみチェック

  6. Main CameraのCulling MaskからUIをアンチェック

  7. UI CameraのDepthをMain Cameraよりも大きくする(Main Cameraが0ならUIの方は1でOK)

  8. 最前面に描画したいcanvasの設定をworldspace, Event CameraをUI Cameraに設定

以上