【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を表示できます。