Unity VR を使用すると、外部プラグインを使わずに、Unity から直接 VR デバイスをターゲットにできます。Unity VR は、基本 API と機能のセット、そして、複数デバイスとの互換性を提供します。Unity VR は、これからのデバイスとソフトウェアにさらに進んだ互換性を提供します。
ネイティブの VR サポートを使用することにより、以下が可能になります。
ゲームのビルドとエディターの VR を使用可能にするには、Player Settings を開き (Edit > Project Settings > Player)、XR Settings を選択し Virtual Reality Supported のボックスをチェックします。各ビルドターゲットごとにこの設定を行います。スタンドアローンビルドの VR を有効にしても、Android のサポートを有効にしたことにはなりません (逆の場合も同様)。
チェックボックスの下の Virtual Reality SDKs リストに、それぞれのビルドターゲットの VR デバイスを追加、または、削除します。リストの順番は、ランタイムに Unity が VR デバイスを有効にする順番です。最初に適切に初期化されたデバイスが有効にされます。このリストの順番はビルドされたプレイヤー内でも同じです。
ビルドされたアプリケーションは、XR Settings の Virtual Reality SDKs リスト (前出の Unity の VR サポートを有効にする 参照) と同じ順番で、デバイスを初期化し有効にします。ビルド時にリストにないデバイスは、最終的なビルドで使用できません。リストにデバイスがない場合は、非 VR アプリケーション (つまり、通常の Unity アプリケーション) と同等で、実行時にリストに含めずに切り替えることができます。例外は None です。
リストにデバイスとして 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
Unity で VR を有効にすると、自動的にいくらか変化が起こります。
シーンのすべてのカメラは、直接ヘッドマウントディスプレイ (HMD) にレンダリングできます。ビューとプロジェクション行列が自動的に調整され、ヘッドトラッキング、位置トラッキング、有効視野 (field of view, FOV) を処理します。
Camera コンポーネントの stereoTargetEye プロパティを使用して HMD へのレンダリングを無効にすることが可能です。その他に、 Target Texture プロパティを使って、カメラがレンダーテクスチャにレンダリングするように設定できます。
stereoTargetEye
プロパティを使用して、特定の眼だけを HMD にレンダリングするようカメラを設定することができます。これは、スナイパースコープや、立体映像のビデオなどの特殊なエフェクトに役立ちます。これを行うには、シーンにカメラを 2 つ加え、1 つのターゲットを左眼、もう 1 つを右眼に合わせます。Unity からそれぞれの眼に送るものを微調整するために、レイヤーマスクを設定して下さい。使用するデバイスがヘッドマウントの場合、Unity は自動的にヘッドトラッキングと適切な FOV をカメラに適用します。手動で FOV を特定の値に設定することもできますが、Camera の Transform の値は直接設定することはできません。詳しくは、後出の カメラを理解する のセクションを参照してください。
自動ヘッドトラッキングと位置トラッキングは、Unity がフレームをレンダリングする前に、位置と向きをユーザーのものとできるだけ正確に一致させようとします。こうすることにより、快適な VR 体験が実現し、ユーザーが吐き気をもよおすことを防ぎます。
Unity はカメラの Transform をヘッドトラッキングによる位置で上書きします。カメラを動かしたり回転させたりするには、他のゲームオブジェクトの子としてアタッチします。そのため、カメラがアタッチした親の Transform が変化すると、その変更のすべてがカメラにも影響します。このことは、スクリプトを使ったカメラの移動や回転の場合でも同じです。
カメラの位置と向きを、ユーザーがニュートラルな姿勢で見ている状態と考えます。
座ったまま (seated) とルームスケール (room-scale) の VR 体験には相違点があります。
デバイスにレンダリングされている各カメラは、カメラの FOV を、各 VR SDK のソフトウェア設定でユーザーが入力したFOV に自動的に置き換えます。この動作は動きによる酔いを引き起こすことが知られているため、ユーザーは実行時に FOV を変更することはできません。
stereoTargetEye を左眼、または両眼に設定すると、左眼がゲームビューウィンドウにレンダリングされます。stereoTargetEye を右眼に設定すると、右眼がゲームビューウィンドウにレンダリングされます。
エディターでの実行にはオーバーヘッドがあり、遅延やブレが発生することがあります。Unity IDE は各ウィンドウをレンダリングする必要があるため、ゲームビューの Maximize on Play を使ってエディターのレンダリングオーバーヘッドを削減してください。
パフォーマンスを検証する最良の方法は、ターゲットプラットフォームのビルドを作成して直接実行することです。開発ビルド以外で実行するほうが良いパフォーマンスを得られますが、開発ビルドを使うと、より詳しいパフォーマンスプロファイリングを得るために Unity プロファイラーに接続することができます。
ターゲット HMD に近いフレームレートを達成することは、よい VR 体験のためには不可欠です。これは、HMD で使われるディスプレイのリフレッシュレートと一致しなければなりません。フレームレートが HMD のリフレッシュレートを下回ると特に顕著で、しばしばプレイヤーが吐き気を感じる原因になります。
下の表は一般的な VR ヘッドセットに対するデバイスリフレッシュレートです。
VR デバイス | リフレッシュレート |
---|---|
Gear VR | 60Hz |
Oculus Rift | 90Hz |
Vive | 90Hz |
Windows: Windows 7、8、8.1、10 はすべて互換性あり。
Android: Android OS Lollipop 5.1 以降。
OS X: OSX 10.9 以降とランタイムに Oculus 0.5.0.1。ただし、Oculus は OS X 対し開発停止 しているため、Unity でネイティブの VR 機能を使うには Windows を使用してください。
グラフィックスカードドライバ: ドライバを更新するよう注意してください。すべてのデバイスは最新のドライバに対応しています。そのため、古いドライバはサポートされていない場合があります。
各 VR デバイスでは、マシンに適切なランタイムがインストールされている必要があります。たとえば、Unity 内で Oculus を開発して実行するには、Oculus ランタイム (Oculus Home とも呼ばれます) がマシンにインストールされている必要があります。Vive には、Steam と SteamVR が必要です。
使用している Unity のバージョンによっては、Unity でサポートしている特定のデバイスのランタイムバージョンが異なる場合があります。ランタイムバージョンは、Unity のメジャーおよびマイナーリリースの各リリースノートを参照してください。
バージョンの更新の中には、以前のランタイムバージョンをサポートしないものもあります。つまり、ネイティブの Unity VR サポートは以前のランタイムバージョンでは機能しませんが、新しいランタイムバージョンでは引き続き動作します。
Unity のネイティブの VR サポートは、プロジェクトのフォルダ内からプラグインを読み取らないため、VR サポートを有効にしている場合、ネイティブサポートで以前のバージョンのプラグインの取得はできません。あるリリースバージョンの Unity で、サポートしていない古いバージョンのプラグインを使用する場合は、Native VR Support を無効にします( XR Settings の Virtual Reality Supported を無効にします)。それから、他のサードパーティのプラグインと同様にプラグインにアクセスできます。詳細については、前述の Unity の VR サポートを有効にする セクションを参照してください。