VR における動き

確認済のバージョン: 5.3

-

難易度: 初級

VR 使用時にユーザーが酔い(気持ち悪さ)を感じる主な原因のひとつとして、目標フレームレートに達していないこと(VR 概要 の章参照)が挙げられますが、これに加え、VR 内における「動き」も主な原因のひとつです。このため、その実装に当たっては慎重な検討が必要です。開発のごく早期に―できればコンセプトの段階で―検討を行うのが最善です。採用した動きの実装方式が酔いの原因になることが判明すれば、プロジェクトに大きな影響を及ぼすことになるからです。

VR における酔いと快適さ

この酔い((VR 酔い)として知られています)の原因のひとつは、実際のユーザーの身体が動いていないのに仮想環境の中で(仮想の)視点が移動することです。これには ベクション(視覚誘導性自己運動感覚) も密接に関係しており、したがってできるだけ回避することが推奨されます。

基本的に守るべき原則のひとつは、ユーザーと全く同じ動きをする場合以外はカメラの動きは避けることです。そうでないと前庭器官 に関連した問題が起こります。簡単に言うと Vection はユーザーの目と耳から矛盾した信号が送られることにより脳が混乱した結果引き起こされるものです。身体はこれを 中毒になった 状態であると認識し、それに似た反応、つまり酔いという形での拒否反応が引き起こされます。ただし何事にも例外がありますので、できるだけ幅広いユーザーでテストを行い、あなたのゲームに適した方法を見付けることをお勧めします。

ベクションによる酔いは、ルームスケールの HTC Vive などの空間トラッキングを使用した VR システムでは比較的起こりにくくなります。ただしこの場合にも開発者は、ユーザーを環境内で動かして耳と目のバランスに混乱を招くことのないよう、気を付けなければならないことに変わりはありません。

現段階で最も快適な VR 体験は、ユーザーが座って静止している状態のものです。このことから、VR では砲塔スタイルのゲームが非常に人気です。VR Samples の Shooter 180 (Target Gallery) と Shooter 360 (Target Arena) のシーンがこれに当たります。

VR におけるファーストパーソンゲーム

従来の、マウスと WASD(前後左右)キーあるいはゲームパッドによるファーストパーソンのキャラクター操作は、酔いを引き起こしやすいため避けるのが最善です。ファーストパーソン制御を使用する場合には、できるだけ多くのユーザーで動きのテストを行い、首振りは無効にすることを強くお勧めします。ヨーイング(yaw)を無効にする ことを検討し、その代わりにスナップ回転を使用したほうが良いでしょう。場合によっては極めて素早いカメラフェードと併用します。素早いフェードとスナップ回転に関する詳細は下記にある CameraOrbit コンポーネントをご確認ください。

技術的な理由(以下の Maze の例をご覧ください)であれ、それ以外の理由であれ、動きの実装が必要な場合は、ユーザーのために視覚的な基準となる静止要素を常に表示するようにしてください。例えばコックピットやキャビン、車の内部などがこれに当たります。Unity VR ゲームでコックピットを使用した例は、 Radial-G あるいは Lunar FlightTitans of Space でご覧いただけます。

VR におけるフェードおよび Blink (まばたき)遷移

仮想環境の中の複数の位置間の移動に使用される方法で人気があるものは、黒へのフェードアウト(fade to black)遷移の実装です。素早く黒へフェードアウトし、カメラを目的位置に移動し、フェードインします。この代替案として、もう少し複雑な方法に Blink 遷移があります。これはユーザーのまばたき(blink)を 2 枚の黒い面を使って模倣したものです。Oculus の Tom Forsyth 氏が、Oculus Connect 2014 の動画 でこれについて説明しています。

VR Sample シーンに見られる動き

VR 開発を始めよう の章で触れた通り、Unity 上で直接カメラを動かすことはできません。カメラは別のゲームオブジェクトの子になっている必要があり、位置と角度の変更は親の Transform に加える必要があります。

Camera Container

VR Samples プロジェクトでは、ユーザーに快適な VR 体験を提供するため、ほとんどのシーン(MenuTarget ゲーム) にはカメラの動きが一切含まれていません。ただし、Flyer と Maze には動きが含まれます。どんな動きが、どのような理由で含まれているのか、詳しく見て行きましょう。Menu UI には、これらのシーンについて、‘most’(「ほとんどの」)ではなく ‘some’(「一部の人には」)快適である、と説明されています。VR に入った直後にユーザーのやる気をそぎたくはありませんが、最終的に快適な体験にするためには、適切な事前メッセージはあるほうが良いでしょう。

Flyer における動き

Flyer サンプルシーン内のカメラは、一定の速度で前方に移動していますが、カメラがイントロダクション UI からフェードインしてくる時点で既に動いています。これは、静止画面から急に加速が開始されると酔いの原因になることを回避するためです。

Flyer

飛行機の後ろの軌跡と、環境の外縁付近で動き回る粒子が、高速で遥か遠くに移動している印象を与えています。またこれらの要素は、周囲を見渡したときに視界内で基準になる要素としても機能しており、酔いを防ぐためにも役立っています。

カメラを静止した状態に保ち、それ以外の全ての要素を動かすことでも、似た効果を得ることは可能です。

Maze ― テーブルゲーム型の動き

Maze シーンは俯瞰視点の「ボードゲーム」型ゲームの一例です。カメラは静止した状態で、スワイプによって迷路(maze)が回転します。

回転する Maze

ただし、迷路内におけるキャラクターのナビゲーションにはライトマッピングと ナビメッシュ を使用しており、このためにはオブジェクトが「静的(static)」とマークされていなければならないため、ボードを回転させることはできません。代わりに、以下のようなヒエラルキーになっています。

Maze のカメラのヒエラルキー

VROrbitCamera オブジェクトが迷路の中央に、MazeUnityLogo オブジェクトが一方の側に、MainCamera がもう一方の側に配置されています。

回転する Maze

これによって VROrbitCamera オブジェクトを回転させることができ、子が Maze の中央辺りを旋回できるようになっています。Unity のロゴは視覚的な基準要素として機能しており、あたかもボードだけが回転しているように見せるための助けとなっています。

VROrbitCamera が次の 2 つのコンポーネントを持っていることで、回転が可能になっています。

  • CameraOrbit 回転をハンドルします。

  • Rigidbody これにより、Mass および減衰のパラメーターを簡単に変えられるようになっています。

Camera Orbit

この CameraOrbit コンポーネントには Orbit Style の設定項目があり、3 つのオプションが提供されています。

Camera Orbit Enum

  • Smooth このプロジェクトで使用しているオプションです。これによってボードが滑らかに回転し、動きがゆっくりと減衰するようになります。試しに Rotation IncrementRigidBody のプロパティを変更し、速度・減衰・スワイプごとのカメラ周回数の組み合わせを色々と変えてみてください。

  • Step 回転を行う際、目的の位置に瞬間的に切り替えたい場合もあるでしょう。Rotation Increment を変更するとカメラの周回数を変えられます。

  • Step With Fade これは Step と基本的には同じですが、カメラがごく素早くフェードアウトし、ボードが回転し、再度フェードインします。カメラを素早くフェードアウトしてからカメラの位置を変えてフェードインする方法は、酔いを起こさずに VR 環境内でユーザーを移動させるのに役立ちます。Rotation Fade Duration を変更すると、各フェードの長さを調整できます。

回転 Step With Fade

動きや、酔いの回避については、VR コンテンツを開発する上で必ず考慮が必要になります。これらの重要な事項を詳細に網羅した Oculus の Simulator Sickness (3D 酔い) および Motion (動き)のガイドを十分に読むことをお勧めします。

Shooter 180 / 360 (Target Gallery / Arena) における動き

この 2 つのサンプルシーンでは、角度を利用したヘッドトラッキングによる動きの入力制御と、簡単な射撃入力とを併用しています。環境自体がプレイヤーの周りで動くことはありません。単純に静的な環境の中に標的が現れ、プレイヤーがそれを見て撃つだけです。

これらのシーンについては、Menu シーンに ‘Comfortable for most(「ほとんどの人にとって快適」)’ と説明されています。この種のゲームプレイは滅多に酔いを引き起こさないことが証明されているからです。

以上、VR における動きの仕組みと、サンプルシーンにおける動きの実装、また各サンプルシーンに特定の動きを実装した理由をご説明しました。以下のリンクで、関連情報を更にご覧いただけます。

次章 VR プロジェクトをデプロイする では、ゲームを DK2 や Gear VR でテストするためのデプロイ方法をご説明します。