【Unity/VR】World SpaceのCanvasを最前面に表示

VRで開発する際、CanvasはRender ModeをWorld Spaceで作成する必要がありますが、 カメラから見える一定の距離にCanvasを配置する必要があるため、 モンスターのように動くオブジェクトの場合はカメラとCanvasの間に入り込んでしまうことが起こります。

Worldに溶け込ませるタイプなら問題ありませんが、 視界を覆うようなフェードをかけたい場合はこれでは困ってしまいます。

これは、最前面専用のCameraを用意することで簡単に解決できます。

手順

Cameraを追加

  • Clear FlagsにDepth Only
  • Depthを他のカメラよりも大きい値
  • Culling Maskを前面に表示したいLayerに設定(例えば、UI)

最前面に表示したいものを追加

最前面に表示したいGameObjectのLayerを先ほどカメラに指定したものに設定し、 他のカメラのCulling Maskから指定したLayerのチェックを外しておきます。

確認

HierarchyでCameraを選択し、SceneタブのCamera Previewで意図したとおりになっていればOK。

補足

描画はDepthの小さいものから行うため、先に一般的なものを描画した後に、前面に出したいものを描画することで positionによらず常に前面に描画できます。(カメラ内ではpositionやorderに依存)

CanvasをCamera内に配置すればHMDに追従するので、 画面(視界)全体のフェード等のエフェクトや常に視界に入れて置きたいUIを表示できます。

参考