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

引き続き、VR用公式チュートリアルネタです。

今回はVRにおけるUI(ユーザーインターフェース)について
まとめていきます。(翻訳作業に近いことしてます…)
http://unity3d.com/jp/learn/tutorials/topics/virtual-reality/user-interfaces-vr?playlist=22946
(参考URL)

※本記事はUnityの基礎知識及び、VR開発機材を持っている方が対象

ユーザーインターフェースの種類

HUD (Non-diegetic)


一般的なゲームではスコアや体力ゲージなどを常にスクリーンの手前に表示する
HUD(ヘッドアップディスプレイ)と呼ばれるUIが一般的に使用されています。

■HUD UI の例
2d-ui-hud-01

2d-ui-hud-02

ディスプレイを一定の距離で見るスタンスであればこのUIで全く問題ありませんが
VRの場合、「ディスプレイ」 と 「目」の距離が近いため
HUDタイプだと焦点を併せ難くなってしまいます。

そのため、UnityでVRコンテンツを作成する場合、
HUDタイプのUI(CanvasのRenderModeの[ScreenSpace – Overlay])は
サポート対象外としているようです。

実際に試してみた
実際に「Canvas」に画面全体を覆うようなImageを配置したところ、 エディタ内の「Game」ビューには表示されるが、Oculus Rift(実機)では 「ScreenSpace – Overlay」の「Canvas」は一切表示されませんでした

空間UI (Spatial UI)


HUDのようにスクリーン手前にUIを表示するのではなく、
3D空間上にUI表示する手法を「空間UI(Spatial UI)」と言い
VRゲームのUIとして多くの作品に使用されております。
Unityでは CanvasのRenderModeを[World Space]で配置されたUIがこれに該当します。
(あまり馴染みのない言い方…)

Spatial UI-demo
↑のテキスト部分が「Spatial UI」と呼ばれるもの

ただ、空間上ならどこに置いても良いという訳ではなく、
近い場合では読書する距離 (1m – 3m) くらいで、
遠い場合でも 10m くらい離れたところに
ビルの立て看板の文字の大きさくらいにするのがベストだと思います。

また、プレイヤーの情報等を常に見える場所に表示したい場合
VRカメラの子オブジェクトとしてUIを配置することで
どこを向いても常に一定の場所に表示させることが出来ますが、
VRの場合、周囲を見つつ、手前にあるUI も見ることになってしまい、
ユーザーへの不快感(ベクション)につながるため控えたほうが良いようです。

【空間UI上に配置】 (不快感は感じにくい)
SpatialUI-demo02

【カメラの子オブジェクトとして配置】 (不快感を感じやすい)
SpatialUI-demo01

TIPS : 特定の方向へ促したい
VRでは常に360度見回すことが可能なため、 特定の方向に向かせたい場合 専用のUIを用意する必要がありますが、 Unityでは「GUI Arrows」というPrefabが提供されておりました。 使い方は下のキャプチャの通りで VRカメラオブジェクトの設定、 向いて欲しい方向等を設定するだけのシンプルなものです。

unity-ui-gui-arrows

GUIArrows-demo
左右それぞれ向くと、正面を見るように促される


Diegetic UI


空間UIの代替え案として、
オブジェクト自体がユーザーに情報を表示する役割を持たせる手法があります。
例えば、壁掛け時計、テレビ、携帯端末などが挙げられます。
こういった手法を「Diegetic UI(ダイジェティック UI)」と言うそうです。
(これまた馴染みのない言い方…)
(広い意味では、空間UIとも言えるかも…)

sample
自機に追従するように表示されているのが「Diegetic UI」と呼ばれるもの

まとめ

3D空間上のUIタイプとしては以下の3つが一般的
・HUD
・Spatial UI
・Diegetic UI

VR上では以下2つを用いるのが一般的
・Spatial UI
・Diegetic UI

感覚的に判っていたことが多かったけど、
それを文字で説明するとなるとすごく大変でした。。。