バーチャルリアリティ
VR 参照ページ

VR 概要

Unity VR を使用すると、プロジェクトに外部プラグインを使わずに、Unity から直接 VR デバイスをターゲットにできます。Unity VR は、基本 API と機能のセット、そして、それらの機能と複数デバイスとの互換性を提供します。Unity VR は、これからのデバイスとソフトウェアにさらに進んだ互換性を提供するよう、設計されています。VR API の外見は、計画的に最低限にされていますが、VR が継続的に発展していくにつれ拡張されます。

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

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

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

ゲームのビルドとエディターの VR を使用可能にするには、Player Settings を開き(menu: Edit > Project Settings > Player)、 Other Settings を選択し Virtual Reality Supported のボックスをチェックします。各ビルドターゲットごとにこの設定を行います。スタンドアローンビルドの VR を有効にしても、Android のサポートを有効にしたことにはなりません (逆の場合も同様)。

その下に表示された Virtual Reality SDKs のリストに、それぞれのビルドターゲットの VR デバイスを追加、または、削除します。リストの順番は、ランタイムに Unity が VR デバイスを有効にする順番です。最初に適切に初期化されたデバイスが有効にされます。このリストの順番はビルドされたプレイヤー内でも同じです。

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

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

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

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

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

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

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

使用するデバイスがヘッドマウントの場合、ヘッドトラッキングと適切な Field of View (FOV) は自動的にカメラに適用されます。手動で FOV を特定の値に設定することもできますが、Camera の Transform の値は直接設定することはできません。詳しくは、後出の カメラを理解する のセクションを参照してください。

ヘッドトラッキングと位置トラッキングが自動的に適用され、フレームをレンダリングする前に、位置と向きをできるだけ正確にユーザーのものと一致させます。こうすることにより、快適な VR 体験が実現し、ユーザーが吐き気をもよおすことを防ぎます。

カメラを理解する

Camera の Transform は、ヘッドトラッキングした姿勢でオーバーライドされます。 カメラを動かしたり回転させたりするには、他のゲームオブジェクトの子としてアタッチします。そのため、カメラがアタッチした親の Transform が変化すると、カメラにも影響します。このことは、スクリプトを使ってカメラを動かしたり回転させる場合でも同じです。

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

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

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

自動的にデバイスにレンダリングされた各カメラの Field of view はユーザーが各 VR SDK のソフトウェア設定でインプットした Field of view でオーバーライドされます。スクリプトをとおしてランタイムにこの Field of view の値をオーバーライドして、そのアプリケーションに特化したカスタムの Field of view を設定することもできます。

  • カスタムの Field of view を設定するには Camera.fieldOfView を使用します。

エディター モード

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

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

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

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

  • Unity プロファイラーは、エディター外で実行した場合のパフォーマンスがどの程度になりそうか予測するのに役に立つツールです。ただし、プロファイラー自体もオーバーヘッドを発生させます。

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

アプリのビルド: 起動するデバイスを選ぶ

ビルドされたアプリケーションは Player Settings リスト (前出の Unity の VR サポートを有効にする 参照) と同じ順番で、デバイスを初期化し有効にします。ビルド時にリストにないデバイスは、最終的なビルドで使用できません。

リストの最上位でないデバイスで開始したい場合は、実行ファイルにコマンドライン引数を渡して、強制的に特定のデバイスで開始することもできます。前の説明のように、このデバイスは、アプリケーションをビルドする以前にリストに含まれていなければなりません。

特定のデバイスで開始するためのコマンドライン引数は以下のとおりです。

-vrmode DEVICETYPE

上記の DEVICETYPEVR デバイスのリスト でサポートされているデバイスのうちの 1つです。

MyGame.exe -vrmode oculus

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

ハードウェア

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

VR デバイスのリフレッシュレート

VR デバイス リフレッシュレート
Gear VR 60hz
Oculus CV1 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 を使用してください。

  • グラフィックスカードドライバ: ドライバを更新するよう注意してください。すべてのデバイスは最新のドライバに対応しています。そのため、古いドライバはサポートされていない場合があります。

  • Oculus Runtime: Runtime 0.8 以降。

バーチャルリアリティ
VR 参照ページ