Unity VR を使用すると、プロジェクトに外部プラグインを使わずに、Unity から直接 VR デバイスをターゲットにできます。Unity VR は、基本 API と機能のセット、そして、それらの機能と複数デバイスとの互換性を提供します。Unity VR は、これからのデバイスとソフトウェアにさらに進んだ互換性を提供するよう、設計されています。
ノート: XR とは仮想現実 (VR)、拡張現実 (AR)、複合現実 (MR) を含む包括的な用語です。XR に関するドキュメントを更新中です。ただし、今のところ、これらのドキュメントは主に VR に関してです。
** Unity の XR API は広義の用語「XR」を反映するように更新されましたが、ドキュメントの多くは現在でも「VR」という用語を使用しています。 XR API サーフェスは設計上最小限ですが、XR の発展に伴い拡張されます。**
ネイティブの 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 プロパティーを使って、カメラがレンダーテクスチャにレンダリングするように設定できます。
使用するデバイスがヘッドマウントの場合、ヘッドトラッキングと適切な FOV は自動的にカメラに適用されます。手動で FOV を特定の値に設定することもできますが、Camera の Transform の値は直接設定することはできません。詳しくは、後出の カメラを理解する のセクションを参照してください。
ヘッドトラッキングと位置トラッキングが自動的に適用され、フレームをレンダリングする前に、位置と向きをできるだけ正確にユーザーのものと一致させます。こうすることにより、快適な VR 体験が実現し、ユーザーが吐き気をもよおすことを防ぎます。
カメラを動かしたり回転させたりするには、他のゲームオブジェクトの子としてアタッチします。そのため、カメラがアタッチした親の 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 サポートを有効にする セクションを参照してください。