この記事でのバージョン
Unity 2018.4.23f1
はじめに
今回はVR空間上にUIを設置する話で、イメージとしては以下のような感じ。
なお、記事中では以下のアセットを使っています。
Japanese School Classroom | 3D Environments | Unity Asset Store |
UIをVR空間上に設置
さっそくですが、UIをVR空間上に設置したい時はCanvasのRender ModeをWorld Spaceにします。
これでCanvasがVR空間上(というより3D空間上)に表示されるようになります。
UIを常に3Dオブジェクトより前面に表示
VR空間上に表示しているUIは3Dオブジェクトの裏にも行くようになってしまいます。
と言う事で次はUIを常に3Dオブジェクトより前面に表示する方法です。
まず前面に表示する用のレイヤー(今回はInstructionUI)を作成します。
作成したレイヤーを常に前面に表示したいCanvasとその子に設定し、
普通のカメラには映らないようにCulling MaskのInstructionUIのレイヤーのチェックを外します。
さらにInstructionUIだけを映す専用のカメラを作成し、Clear FlagsをDepth only、
Culling MaskをInstructionUIだけにし、Depthを普通のカメラより大きい値にします。
これでInstructionUIのレイヤーを設定した物は常に前面に表示されるようになります。
UIが常にカメラの方を向くように
VR空間上に表示しているUIは、横からは見えないようになってしまいます。
と言う事で次はUIが常にカメラの方を向くようにする方法です。
まず、以下のようにLookAtを使って対象の方を見続けるスクリプトを作成、
using UnityEngine; /// <summary> /// 常にカメラの方を見るキャンバス /// </summary> public class LookAtCameraCanvas : MonoBehaviour { [SerializeField] private Transform _camera = null; private void Update() { transform.LookAt(_camera); } }
これをCanvasにAddし、Inspectorでカメラをアタッチ、さらにScaleのxをマイナスにして反転させます。
これで常にカメラの方を見るようになります。