27
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UnityのUnityEngine.VRについて

Last updated at Posted at 2015-10-18

#UnityEngine.VR

Unity内のUnityEngine.VRの名前空間にVRで使用するクラスなどが含まれています。
Oculus Utilities for Unity 5と違って特定のunitypackageをインポートする必要はありません。
ただしUnityのバージョンによって挙動が違う可能性があります。

この記事は以下のUnityのバージョンを使用しています。
Version 5.2.1
Version 5.2.2

InputTracking class 接続しているVRデバイスの位置や向きの取得できます
VRDevice class VRデバイスの接続の有無やデバイスの名前を取得できます
VRDeviceType enum OculusやMorpheusなどVRSettingsから取得できるデバイスの種類
VRNode enum 左目や目の中央部分などInputTrackingから位置や向きを取得する際の位置種類
VRSettings class VRデバイスの使用有無やディスプレイへのミラーリングの有無を設定できます

####InputTracking
Vector3 GetLocalPosition( VRNode node )
 VRデバイスの座標の位置を取得します。単位はメートル。
 引数のVRNodeで左右の目や目の中央を基準とした位置で取得できます(後述)。

Quaternion GetLocalRotation( VRNode node )
 VRデバイスの向きを取得します。
 GetLocalPosition()同様、左右の目や目の中央を基準とした向きを取得できます(後述)。

void Recenter()
 現在のポーズを中心にしてトラッキングを初期化します。
 Oculus Utilities for Unity 5を使う場合はOVRDisplayクラスのRecenterPose()Recenter()を内包しているためそちらを使ったほうがいいかもしれません。

:neutral_face:Recenter()は全てを初期化するわけではないのです
 Recenter()後にGetLocalPosition()を呼ぶと、Recenter()を呼んだ際の位置が(0, 0, 0)となって計算されますが、
 GetLocalRotation()で取得する回転角度はY軸回転のみが0度になります。
 すごく傾いた状態でRecenter()を呼んでもX軸、Z軸の回転は初期化されません。

####VRDevice
string family
 ロードされた VR デバイスのファミリー名。
 Oculus Rift DK2を接続した場合には**"oculus"
 何も接続していない場合には
"none"**の文字列が取得できました。

bool isPresent
 VRデバイスの接続の有無が取得できます。
 
string model
 ロードされた VR デバイスの特定のモデル名。
 Oculus Rift DK2を接続した場合には**"Oculus Rift DK2"**。
 何も接続していない場合には空の文字列が取得できました。

IntPtr GetNativePtr()
 VR デバイスのネイティブ ポインタ を取得します。
 ……とのことですが、詳しく調べきれていないのでよくわかりません。

####VRDeviceType
 VRSettingsクラスのloadedDeviceプロパティにて取得できるVRデバイスの種類。
None
Stereo
Split
Oculus
Morpheus

####VRNode
 VRDeviceクラスのGetLocalPosition()GetLocalRotation()を呼ぶ際の基準点となる位置用のenum。
LeftEye
RightEye
CenterEye
Head

:neutral_face:VRNodeでどこまでパラメータに差はでるのか?
 Oculus Rift DK2で試してみましたよ。
・GetLocalPosition()の場合
getpos.gif

 CenterEyeHeadはどの状態でも同じ値ですね。
 無回転の状態では全てのY座標とZ座標は同じです。
 無回転の状態でLeftEyeRightEyeCenterEyeとは±0.03(3cm)の差です。

・GetLocalRotation()の場合
getrot.gif

 
 どんな状態でも返す値は全て同じですね。
 ※eulerAnglesを使ってオイラー値にして表示しています。

####VRSettings
bool enabled
 VRの使用の有無を取得、設定できます。

:neutral_face:enabledをfalseにすると、カメラの回転と位置は初期の状態になりますよ
enabled.gif

 enabledをfalseに切り替えた際は、切り替え前のカメラの位置と回転になるわけではなく、初期に設定した状態に戻ります。

VRDeviceType loadedDevice
 使用しているVRデバイスの種類を取得できます。
 Oculus Rift DK2を接続した場合には**"Oculus"
 何も接続していない場合には
"None"**が取得できました。

float renderScale
 レンダリング解像度を取得、設定できます。
 デフォルトは1.0fです。
 0.0fに近づけるほどレンダリング解像度を下げることになるので描画負荷が軽減します。

:neutral_face:解像度を下げるとどんな感じになるの?
render.gif
 0.2ぐらいになると見れたものではないですね。

bool showDeviceView
 VRデバイスで表示されているものをメインディスプレイにミラーリングします(左目のみ)。

27
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
27
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?