Version: 2019.2
複合現実 (Mixed Reality, MR) デバイス
VR デバイス

VR 概要

Unity VR を使用すると、外部プラグインを使わずに、Unity から直接 VR デバイスをターゲットにできます。Unity VR は、基本 API と機能のセット、そして、複数デバイスとの互換性を提供します。Unity VR は、これからのデバイスとソフトウェアにさらに進んだ互換性を提供します。

ネイティブの VR サポートを使用することにより、以下が可能になります。

  • 各 VR デバイスの安定バージョン
  • さまざまな VR デバイスと通信するための 1つの API インターフェース
  • 各デバイスごとの、外部プラグイン無しのクリーンなプロジェクトフォルダー
  • アプリケーション内で複数デバイスを扱い、その間を切り替えることが可能な性能
  • パフォーマンスの向上 (ネイティブデバイスに対し、低水準の Unity エンジン最適化が可能)

Unity の VR サポートを有効にする

To enable native VR support for your game builds and the Editor, open the Player Settings (menu: Edit > Project Settings > Player). Select XR Settings and check the Virtual Reality Supported checkbox. Set this for each build target. Enabling virtual reality support in a standalone build doesn’t also enable the support for Android (and vice-versa).

Use the Virtual Reality SDKs list below the checkbox to add and remove VR devices for each build target. The order of the list is the order in which Unity tries to enable VR devices at runtime. The first device that initializes properly is the one enabled. This list order is the same in the built Player.

XR Settings で Virtual Reality Supported を有効にする
XR Settings で Virtual Reality Supported を有効にする

ビルド済みアプリケーションで起動するデバイスを選ぶ

Your built application initializes and enables devices in the same order as the Virtual Reality SDKs list in XR Settings (see Enabling VR Support, above). Devices not present in the list at build time are not available in the final build; the exception to this is None. Device None is equivalent to a non-VR application (that is, a normal Unity application) and can be switched to during runtime without including it in the list.

リストにデバイスとして None を含めると、VR デバイスの初期化を行なおうと試みる前に、非 VR アプリケーションにデフォルト設定することができます。リストの一番上に None を配置すると、アプリケーションは VR を無効にして起動します。次に、 XR.XRSettings.LoadDeviceByName を使用して、スクリプトを通してリストに存在する VR デバイスを有効または無効にすることができます。

切り替えようとするデバイスの初期化が失敗すると、Unity はそのデバイスがまだアクティブな VR デバイスとして設定されている状態で VR を無効にします。デバイスを切り替えたり (XRSettings.LoadDeviceByName)、有効にすると (XR.XRSettings-enabled)、ビルドされたアプリケーションは再び初期化を試みます。

特定のデバイスを起動するには、以下のコマンドライン引数を使用します。

-vrmode DEVICETYPE

この DEVICETYPE はサポートされている XR サポートデバイスリスト にある名前の 1 つです。

MyGame.exe -vrmode oculus

VR を有効にすると、何が起きるか

Unity で VR を有効にすると、自動的にいくらか変化が起こります。

自動的にヘッドマウントディスプレイにレンダリング

シーンのすべてのカメラは、直接ヘッドマウントディスプレイ (HMD) にレンダリングできます。ビューとプロジェクション行列が自動的に調整され、ヘッドトラッキング、位置トラッキング、有効視野 (field of view, FOV) を処理します。

Camera コンポーネントの stereoTargetEye プロパティーを使用して HMD へのレンダリングを無効にすることが可能です。その他に、 Target Texture プロパティーを使って、カメラがレンダーテクスチャにレンダリングするように設定できます。

  • stereoTargetEye プロパティーを使用して、特定の眼だけを HMD にレンダリングするようカメラを設定することができます。これは、スナイパースコープや、立体映像のビデオなどの特殊なエフェクトに役立ちます。これを行うには、シーンにカメラを 2 つ加え、1 つのターゲットを左眼、もう 1 つを右眼に合わせます。Unity からそれぞれの眼に送るものを微調整するために、レイヤーマスクを設定して下さい。

ヘッドトラッキングされた自動入力

Unity versions newer than 2019.1 no longer support automatic head tracking for head-mounted devices. Use the Tracked Pose Driver feature of the XR Legacy Input Helpers package to implement this functionality.

You can install the XR Legacy Input Helpers package using the Package Manager window.

カメラを理解する

Unity はカメラの Transform をヘッドトラッキングによる位置で上書きします。カメラを動かしたり回転させたりするには、他のゲームオブジェクトの子としてアタッチします。そのため、カメラがアタッチした親の Transform が変化すると、その変更のすべてがカメラにも影響します。このことは、スクリプトを使ったカメラの移動や回転の場合でも同じです。

Childing the Main Camera to a GameObject - in this case, a camera container
Childing the Main Camera to a GameObject - in this case, a camera container

カメラの位置と向きを、ユーザーがニュートラルな姿勢で見ている状態と考えます。

座ったまま (seated) とルームスケール (room-scale) の VR 体験には相違点があります。

  • デバイスがルームスケールの体験をサポートする場合は、ユーザーのプレイスペースの中央がカメラの開始位置になります。
  • 座ったまま (seated) の体験にする場合は XR.InputTracking.Recenter() を使って、カメラをニュートラルな位置にリセットします。

デバイスにレンダリングされている各カメラは、カメラの FOV を、各 VR SDK のソフトウェア設定でユーザーが入力したFOV に自動的に置き換えます。この動作は動きによる酔いを引き起こすことが知られているため、ユーザーは実行時に FOV を変更することはできません。

エディター モード

  • VR デバイスが Unity エディターモード をサポートしている場合、エディターで再生ボタンを押すとデバイス上で直接テストすることができます。

stereoTargetEye を左眼、または両眼に設定すると、左眼がゲームビューウィンドウにレンダリングされます。stereoTargetEye を右眼に設定すると、右眼がゲームビューウィンドウにレンダリングされます。

  • ゲームビューで左右の眼のビューを横並びにするには、2つのカメラを作成します。片方を左眼、もう片方を右眼に設定し、それらを表示するビューポートを横並びにします。

エディターでの実行にはオーバーヘッドがあり、遅延やブレが発生することがあります。Unity IDE は各ウィンドウをレンダリングする必要があるため、ゲームビューの Maximize on Play を使ってエディターのレンダリングオーバーヘッドを削減してください。

パフォーマンスを検証する最良の方法は、ターゲットプラットフォームのビルドを作成して直接実行することです。開発ビルド以外で実行するほうが良いパフォーマンスを得られますが、開発ビルドを使うと、より詳しいパフォーマンスプロファイリングを得るために Unity プロファイラーに接続することができます。

Unity を使った VR 開発で推奨のハードウェアとソフトウェア

ハードウェア

ターゲット HMD に近いフレームレートを達成することは、よい VR 体験のためには不可欠です。これは、HMD で使われるディスプレイのリフレッシュレートと一致しなければなりません。フレームレートが HMD のリフレッシュレートを下回ると特に顕著で、しばしばプレイヤーが吐き気を感じる原因になります。

下の表は一般的な VR ヘッドセットに対するデバイスリフレッシュレートです。

VR デバイス リフレッシュレート
Gear VR 60Hz
Oculus Rift 90Hz
Vive 90Hz

ソフトウェア

  • Windows: Windows 7、8、8.1、10 はすべて互換性あり。
  • Android: Android 5.1 (Lollipop) or higher.
  • macOS:
  • Oculus: macOS 10.9+ with the Oculus 0.5.0.1 runtime. However, Oculus have paused development for macOS, so use Windows for native VR functionality in Unity.
  • HTC Vive: macOS 10.13.
  • グラフィックスカードドライバ: ドライバを更新するよう注意してください。すべてのデバイスは最新のドライバに対応しています。そのため、古いドライバはサポートされていない場合があります。

デバイスのランタイムの要件

各 VR デバイスでは、マシンに適切なランタイムがインストールされている必要があります。たとえば、Unity 内で Oculus を開発して実行するには、Oculus ランタイム (Oculus Home とも呼ばれます) がマシンにインストールされている必要があります。Vive には、Steam と SteamVR が必要です。

使用している Unity のバージョンによっては、Unity でサポートしている特定のデバイスのランタイムバージョンが異なる場合があります。ランタイムバージョンは、Unity のメジャーおよびマイナーリリースの各リリースノートを参照してください。

バージョンの更新の中には、以前のランタイムバージョンをサポートしないものもあります。つまり、ネイティブの Unity VR サポートは以前のランタイムバージョンでは機能しませんが、新しいランタイムバージョンでは引き続き動作します。

Unity のネイティブの VR サポートは、プロジェクトのフォルダ内からプラグインを読み取らないため、VR サポートを有効にしている場合、ネイティブサポートで以前のバージョンのプラグインの取得はできません。あるリリースバージョンの Unity で、サポートしていない古いバージョンのプラグインを使用する場合は、Native VR Support を無効にします( XR SettingsVirtual Reality Supported を無効にします)。それから、他のサードパーティのプラグインと同様にプラグインにアクセスできます。詳細については、前述の Unity の VR サポートを有効にする セクションを参照してください。


  • Automatic head tracking support removed in 2019.1.

NewIn20191

複合現実 (Mixed Reality, MR) デバイス
VR デバイス