まきゼミ技事録!

とあるゼミのプログラマー達が送る技術ブログのようなもの

VRでのUIの種類について

皆さんこんにちは。ひろたか('Д')です。

今回はVRでのUIの種類について紹介したいと思います。

 

環境

  • Unity2017.4.0f1
  • ovr_unity_utilities_1.26

ovr_unity_utilitiesは最新版の1.27が下記のリンクでダウンロードできます。

Oculus Utilities for Unity | Developer Center | Oculus

 

UIの種類

  • Spatial UI(空間UI)
  • Diegetic UI
  • Non-diegetic(HUD)

大きく分けてこの3つがあります。上から順に紹介します。

Spatial UI(空間UI)

これは、3D空間上にUIを表示する手法です。多くのVRゲームで採用されています。

f:id:MakiZemi:20180723150521p:plainやり方はCanvasのRender Modeを World Space Canvasに変えるだけです。

Diegetic UI

Spatial UIの代替案としてDiegetic UIがあります。これはオブジェクト自体に情報を表示するというものです。例えば、壁掛け時計やテレビ、コンピューターの画面、携帯電話、近未来の銃に搭載されたホログラム画面があります。

f:id:MakiZemi:20180723160925p:plain

やり方はSpatial UIと同じようにCanvasのRender Modeを World Space Canvasに設定したのちに表示したいオブジェクトの子に設定すれば大丈夫なはずです。

 Non-diegetic(HUD)

常に画面の最前面に表示するというものです。VRではなく一般的なゲームでよく使われます。VRの特性上、目に近すぎると焦点が合わなくなるためこれは向いていません。また、HUDのUI 設定(CanvasのRender ModのScreen Space - Overlay)に VRが対応していません(Unity上では表示されますがVR上だと表示されません)。

それでも前面に表示したい人のために疑似的に再現しました。

やり方は

  1. CanvasのRender Modeを World Space Canvasに設定します。
  2. VRのカメラとは別にUI用のカメラを用意して、CameraのCrearFlagsをDepthOnryにします。
  3. UI用のカメラのCulliMaskをUIのLayerのみにチェックを入れ、VRのカメラ(オキュラスならCenterEyeAnchor)のCulliMaskをUIのLayerのみに以外にチェックを入れます。

これで、UIを常に最前面に表示させることができます。しかし、前述したとおり、目に悪いのであまりお勧めはしません。f:id:MakiZemi:20180723170343p:plain

 

まとめ

VRでUIを表示するならやはり、Spatial UIかDiegetic UIどちらかを使用したほうがいいです。また、Spatial UIに限らず、VR空間でUIを置く際はカメラとの位置が重要になるので皆さん気を付けましょう。

 

参考サイト

 

unity3d.com

code.hildsoft.com

Unity5.3のVR機能(ユーザーインターフェース) | TaoVisor