本連載では、全4回の記事を通してVRの長所と短所を解説しながら、魅力的なVRコンテンツ開発の制作方法を解説します。
第2回では、どんなVRコンテンツでも真っ先に検討する必要のある「移動」と「VR酔い対策」についてUnityのセッティングとセットで解説します。VRコンテンツにまったく触れたことのない方はもちろん、すでにVRコンテンツに触れている方にとっても有用な備忘録となるはずです。
第1回 ではVRの魅力と開発環境の導入について説明しました。しかし、いざ自分のアイディアを実現するべく手を動かそうにも先に考えたり決めなければいけないことが膨大にあると気づくはずです。現実の身体の動きと連動できるVRにおいて、真っ先に検討しなければならないのは、プレイヤーの「移動」をどう実装するかです(図1 ) 。また「移動」は、カメラの制御(=プレイヤーの視界範囲の制御)や、VR酔いへの対策とも密接に関連します。
図1 Valve社による移動の種別。『Half-Life:Alyx』公式サイト より
重要なのはVRを手がけるプラットフォームの開発者向け資料やレギュレーションを熟読することで、Meta社が公開しているVRコンテンツ開発者向けの資料 は隅から隅まで読むべき内容であるものの量も多いです。そこで、今回はVRの移動とカメラで意識すればOKな部分と、NGな部分について要点を知っておきましょう。
UnityのVRコンテンツの移動を調整するには?
UnityはVRコンテンツ開発に使えるプラグイン『Unity XR Interaction Toolkit』を用意しており、今回はこれを使います。まずは第1回 で作成したプロジェクトをUnity Hubから開いてください。起動したら、上部のFile -> New Sceneから、VR(Basic)テンプレートを選び、新規シーンを作成しましょう。すると、何もないまっさらなVR空間が作られます。UnityでVRゲームを作成する場合は、このシーンテンプレートが一番の基本になります。
そして、プラグインにUnity XR Interaction Toolkit(Unity公式のVR・ARプラグイン)が入っていることを確認してください(図2 ) 。その次は、デフォルトでは左にある「Hierarchy(ヒエラルキー) 」ウィンドウに「Complete XR Origin Set Up」のプレハブがあること(図3 ) 、デフォルトでは下にある「Project」ウィンドウにXRI Default Inpout Actions(パスはAssets/Samples/XR Interaction Toolkit/2.4.3/Starter Assets/XRI Default Input Actions.inputactions
)があることを確認してください(図4 ) 。VRの移動に関する調整は、このComplete XR Origin Set UpとXRI Default Input Actionsの二者のパラメータからほとんど行えます。
図2 Unity XR Interction Toolkit。プラグインはEdit -> Project SettingsのXR Plug-in Managementから確認可能
図3 XROrigin。UnityのVR(Basic)のシーンを新規作成すると、ヒエラルキーにComplete XR Origin Set Upのプレハブが入っている
図4 XRI Default Input Actions。UnityのVRテンプレートで作成したProjectにはVRのキーアサインを調整するためのXRI Default Input Actionsが入っている
なお、前回の記事でも言及したようにUnityのXRのサンプルはスティックを倒すことで「手に持ったアイテムを回転させたり引いたり離したりする」という機能が標準で有効化されています。しかし、この機能はVRの移動やカメラ操作の邪魔になるので最初に無効化してしまいましょう。Complete XR Origin Set Up -> XR Origin (XR Rig) -> Camera Offset -> Right ControllerとLeft Controllerの直下にある、Ray InteractorのXR Ray Interactor -> Anchor Controlのチェックを外せば大丈夫です(図5 ) 。
図5 AnchorControl
VRコンテンツの開発は“移動”から始まる
VRを体験するプレイヤーの現実の部屋の広さには限りがあります。現在のVRが現実の身体ベースになっているために、移動の実装はVR空間の移動範囲を現実に合わせる か現実で動かずVRの中で動く かの二択を選ぶ必要があります。この問題にはある程度汎用的な回答がすでに用意されているものの、細かい調整やクリエイティブで独創性や魅力を新たに作り出すこともできます。
本記事では移動の実装法として、ルームスケール、テレポート移動、スムーズ移動、オリジナリティのある移動(その他の移動)についてそれぞれ解説します。なお、VR業界用語が統一されているわけではないため、比較的多数に用いられていて通用しやすい言葉を選んでいることをご了承ください[1] 。
ルームスケール: 現実空間に合わせた移動
はじめに「ルームスケール」についてです。これはプレイヤーがVR空間で移動するために、実際に現実空間で移動する必要がある手法のことを指します(図6 ) 。逆説的に、プレイヤーがVR空間内で移動できる範囲も現実の部屋の広さと同じになります。ルームスケールに最低限必要な広さの基準はプラットフォームごとに異なり、SteamVRでは2.0m x 1.5m、Meta QuestとPlayStation VR2 では2.0m x 2.0m以上を必要な広さだとしています。
図6 ルームスケールの例。Steam | The Lab より
ルームスケールに向いているのはプレイするにあたってプレイヤーに身体の大きな動きが必要なジャンル、とりわけフィットネスや音ゲーにスポーツです(代表例は『Beat Saber』など) 。VR黎明期のVRコンテンツはほとんどルームスケ-ルだったといっても過言ではないですが、現状は先述のジャンル以外のVRコンテンツにおいて「ルームスケールのみ」の実装のものはほぼなくなりました。
理由としては「VR技術が一般化してからノウハウの開拓が進み、多様な移動方法が確立された」「 VRゲームだからといってプレイヤーが体力を消耗したいとは限らない」「 ルームスケールだと現実空間よりも広いVR空間を用意してもプレイヤーが動き回れない」の3点があります。筆者は特に2番目の理由が大きいと考えています。歩き回って体力を消耗することが前提のジャンル(フィットネス、音ゲー、スポーツ)では動き回ることの相乗効果があるものの、たとえばパズルゲームやアドベンチャーゲームをVRでプレイするのに現実の部屋をうろうろと歩き回るのは、プレイヤーが求めている体験にはならないでしょう。
なお「プレイヤーは現実空間でもVR空間でもまったく移動する必要がない」のも立派な「ルームスケ-ル」の移動方法の1つです。VR空間内でプレイヤーが終始椅子に座っていたり机の前に立っているだけならば特別な移動方法についての検討は少なくて済みますし、現実とVRのギャップも小さいため酔いづらいメリットがあります。こちらもVR黎明期にはよくあった手法で現在はあまり採用されません(VR酔い対策のメリットよりもゲームデザインの制約のデメリットの方が大きい)が、題材によってはまだ挑戦が可能な移動方法ではあります。
Unityの実装においては「後述のテレポート移動とスムーズ移動、およびカメラ操作のスナップターンとスムーズターンをすべて無効化する」ことでルームスケールのみにできます。ただし、ルームスケールのための各設定の無効化についてここで記述すると後述の説明と重複するため、無効化方法はこれからの説明で併記します。
次は「現実で動かずVRの中で動く」手法を見ていきましょう。これは「テレポート移動」と「スムーズ移動」の2つに分類されます。
テレポート移動
テレポート移動はプレイヤーを座標ごと転移させる移動方法です。テレポート移動はプレイヤーが手に持ったモーションコントローラの先端から放物線が飛び出し、放物線の落下地点をもとに「開発者があらかじめ用意した複数のポイントを移動できる」タイプと「プレイヤーが自分で任意の場所に移動できる」タイプの2種類があります。
テレポート移動の利点は「酔いづらい」ことです。テレポート移動ではプレイヤーの視界が暗転している間にプレイヤーの位置を移動させるので、VR酔いの原因の1つである「現実のプレイヤーの動きが伴わない人工的なカメラ移動」が起こりません。また、テレポート移動には面白みのない冗長な移動を省略できるメリットもあります。
厳密に誰がテレポート移動を最初に発明したかを問うのは難しいですが、テレポート移動を普及させたのはEpic Gamesが開発したVRシューターの古典である『Bullet Train(2015年) 』と『Robo Recall(2016年) 、動画1 』の二部作で間違いないでしょう。
動画1 Robo Recall - Arcade Action Feel
VIDEO
Unityでテレポート移動を調整するには、Complete XR Origin Set Up -> XR Origin (XR Rig) -> Camera Offset -> Right Controller もしくは Left ControllerにあるTeleport InteractorのスクリプトXR Ray Interactorをいじります。Unity標準のテレポート移動はほぼそのままで使えますが、テレポートの放物線(Ray)のパラメータで放物線の速度や加速度などを調整する必要が出てくることもあります。筆者が関わったVRゲームでも、特定のシーンでのみテレポート移動のパラメータを変えてプレイヤーの移動速度を遅くする調整を入れています。
テレポート移動そのものを無効化したい場合はXRI Default Input ActionsのXRI RightHand Locomotion, XRI LeftHand LocomotionのTeleport Mode Activateの中にあるInteractionsのSector -> Directionsをnoneに切り替えるとよいでしょう(図7 ) 。これはスティックを上方向(North)に倒すという条件を“ なし” に切り替えることで無効化することになります。
図7 テレポート移動の無効化
あまり意識されないことですが「テレポートした直後にプレイヤーの眼にうつる場所をどこにするか(どこを正面とするか) 」という点も検討すべきです。一部のVRゲームでは「プレイヤーがテレポート先の視界の角度を調整できる(スティックを倒した方向が正面になる) 」という一見便利な機能が搭載されているのですが、この手法はあまり普及していません。筆者としては「プレイヤーが自分の意図で方向を指定したとしても、直感的には方向感覚を喪失する感覚を改善できない」のが原因ではないかと考えています。筆者が開発に関わったVRゲームでも「テレポート先の視界の角度を調整する機能」が開発中に導入されたものの、「 うまく真っ直ぐに進むことができず、かえって不便になった」というフィードバックが多数見られたため製品への実装が見送られました。こだわりがなければこの機能を丸ごと無効化してしまいましょう。
Unityではこの機能はXRI Default ActionsにXRI RightHand Locomotion / XRI LeftHand LocomotionのTeleport Directionとして登録されています。Teleport Directionを無効化するには、標準でTeleport Directionに紐づけられているprimary 2DAxisを削除してしまうのが手っ取り早いです(図8 ) 。後ほどから「やっぱりTeleport Directionが必要だった」となれば、TeleportDirectionの右側にあるプラスボタン(AddBinding)からBindingのPath(キー配置)を“ <XRController>{RightHand}/primary2DAxis
” として再登録しましょう。
図8 Teleport Directionの無効化
テレポート移動はVR黎明期こそ愛されたものの後年から「細かい位置調整の融通が利かない」「 アクション的なゲームデザインと相性が悪い」「 VRに慣れた人ほどテレポート移動が野暮ったく感じるようになる」といった欠点が目立つようになりました。ゲームデザインとの相性については後ほど解説します。
なお、1つ目の欠点のピンポイントな改善テクニックとしては「プレイヤーの任意移動と開発者の位置指定のハイブリッド」があります。これはプレイヤーが好きな場所へテレポート移動する自由を確保した上で、ゲーム内で重要なアイテムやイベントが配置されている箇所の付近のみ開発者の指定した座標と方向にプレイヤーをテレポート移動させる実装です。この機能はUnityのVR(Example)のシーンにプレハブ“ Teleport Anchor” として配置されているので、ぜひ確認してみてください。
余談ですが、テレポート移動の実装として「プレイヤーの視界を暗転せずに高速移動させる」という手法もあり、この手法を実装したValveは「シフト移動」と呼称しています。暗転しない代わりにVR酔いの懸念が少し高まるものの方向感覚を失いづらく、没入感が損なわれない利点もあります。結局のところ、酔うか酔わないかは調整次第という身もふたもない結論になりかねませんが、最後にものを言うのはテストプレイの試行量とゲームデザイナーによる取捨選択です。
スムーズ移動
スムーズ移動はモーションコントローラについているアナログスティックを使って移動する手法です。一般的な家庭用ゲーム機で、キャラクターを移動させる際の操作と同じもので、VRにおいても基本的には左手の親指でアナログスティックを倒した方向に移動します。スムーズ移動はVRに耐性の低いプレイヤーが酔うリスクがあるものの、VRに耐性がついたプレイヤーは好んでスムーズ移動を使うようになります。
また、スムーズ移動でも「プレイヤーの頭の向きを基準にしてスティックを倒した方向に移動する(頭追従) 」と「プレイヤーのコントローラの向きを基準にしてスティックを倒した方向に移動する(手追従) 」の2パターンがあります。たとえば頭追従だと前に向かって歩きながら左右を見渡すことができません(左右に振り向いた瞬間に移動方向も左右にぶれる)し、一方で腕追従だと腕を振りながら歩こうとすると移動方向がブレブレになったり、銃を左右に構えるたびに移動方向がいちいち変わってしまいます。追従の基準はゲームデザインの意図はもちろん、プレイヤーの好みにもよるのでオプションで切り替えられるようにしましょう。
Unityでスムーズ移動を調整する場合はComplete XR Origin Set Up -> XR Origin (XR Rig) -> Locomotion SystemのMoveにあるコンポーネント“ Dynamic Move Provider (Script)” をいじってください(図9 ) 。また、追従の方向は同コンポーネントのMovement DirectionのLeft Hand Movement Direction(左手の移動方向)とRight Hand Direction(右手の移動方向)でそれぞれ「Head Relative(頭追従) 」と「Hand Relative(手追従) 」の二種類から選べます。他スクリプトから制御したい場合は“ Dynamic Move Provider.cs” にある変数に外部からアクセスしてください。
図9 スムーズ移動の調整
ちなみに、Valveなど一部プラットフォームや開発者はスムーズ移動をContinuous Locomotion(連続的移動)と呼称することがあります。
テレポート移動とスムーズ移動、 どちらを使うか?
図10 Quest Storeベストセラー48本の移動方法
テレポート移動とスムーズ移動の使い分けは、どのようにすればいいでしょうか? 2023年10月時点のMeta Quest Storeのベストセラーランキングの各VRコンテンツの移動方法について調査しました(図10 )( 50本のうち3本が分割販売の三部作のため、2本を重複として除外) 。結果としては「テレポート移動のみ」が4.3%、「 スムーズ移動のみ」が34%、「 両方あり」が10.6%、「 両方なし」が36.2%、「 その他」が14.9%になっています。
「両方なし」が一番多くなっているのは序盤で紹介したフィットネス、音ゲー、スポーツといった体を動かすルームスケールのVRコンテンツが安定した人気を誇るためであり、いくつか含まれるパズルやシミュレーションといったプレイヤーが体を動かさないルームスケールも「両方なし」に含まれます。
続いて多数派を占めるのは「スムーズ移動のみ」です。スムーズ移動のみを採用しているタイトルとしてはシューターや格闘・戦闘シミュレーションなど物理演算や競技性を重視しているものが多いです。これは先述の「テレポート移動はゲームデザインを損なう」という問題が要因の1つです。テレポート移動しかないオンライン対戦型シューターははたして試合が成立しうるでしょうか?(しないので存在しません) 。ステルスゲームで敵の視線から隠れて進むべき通路をテレポート移動ですっとばしてしまったらどうなるでしょうか? ただ、テレポート移動のみで構成されたシューターやステルスゲームもあることにはあるので、一概に否定できるわけではありません。
また、個人差によりますが「テレポート移動は方向感覚を失いやすい」「 テレポート移動は興ざめする」という理由で好まないプレイヤーもそれなりにいますし、「 テレポート移動しか実装されていないVRゲームはプレイヤーの自由が制限されているように感じる」として嫌がる人もいます。そのため直近のMeta Questストアのベストセラータイトルでは「テレポート移動のみ実装」したタイトルはほぼほぼ少数派で「スムーズ移動のみ実装」の11%にすぎません。
基本的にはアクション要素の重要度が低いジャンル、アドベンチャーやパズルなどであればテレポート移動を採用しやすいです。とはいえVRコンテンツ開発者にも「自分はテレポート移動しか使えない」という人もいるので、両方採用できるのであれば両方取り入れた方がよいと筆者は考えていますが、テレポート移動がコンテンツ設計の邪魔になるようならば無理に実装する必要もありません。
オリジナリティのある移動(その他の移動)
かつてバンダイナムコエンターテインメントが運営していたVRアミューズメント施設「VRZONE Shinjuku」では、自転車やゴーカートの形状を模した筐体でプレイするVRゲームが数多く用意されていました。実際にプレイがハンドルを回したりペダルを踏んだり漕いだりすることで「VRの視覚的な情報と現実のプレイヤーの身体のギャップ」を埋めてVR酔いのリスクを減らしながら、現実の体験や経験の記憶を呼び起こし、VRゲームをプレイするプレイヤーの感情を増幅させることができます。
そういった施設型VRゲームのような筐体ベースの体験をMeta Questで再現することはほぼできませんが、実際に存在するアトラクションや乗り物、運動をVRゲームとして再構成したVRコンテンツは数多く存在します。VRコンテンツで移動方法が独自的な場合は、移動方法そのものがゲームデザインおよび体験の題材になっていることが多いです。
分かりやすい例としては、何かしらの乗り物を運転する操作をVRのモーションコントロールでやってみるものです。カヌーを漕ぐ(動画2 )とか、車を運転するとか、ロボットや戦闘機のコックピットでレバーや操縦桿を握ったり傾けたりするものがあります。登山やボルダリングのように「掴んで登る」だけで構成されたVRゲームもあります。
動画2 カヌー移動の例(Phantom: Covert Ops | Oculus Rift Gameplay Trailer)
VIDEO
変わった例としては、スパイダーマンのようにウェブを地形にひっかけてスイングで移動するVRゲーム『Resist』『 Swarm』『 Windlands 2』( 動画3 )、腕を使ったジェット噴射で空間遊泳するVRゲーム『Lone Echo』 、上半身だけのゴリラになって腕を地形に叩きつけて移動するVRゲーム『Gorilla Tag』など様々です。
動画3 ウェブ移動の例(Windlands 2 Official Trailer)
VIDEO
移動にオリジナリティがあるのはそれだけでエンタメとして強烈な個性たりえますが、逆に移動の手法そのものがVRコンテンツの主役ではないときに移動にオリジナリティを設けると、プレイヤーがコンテンツの主題に集中できなくなるノイズになる危険性が高くなります。たとえば、キャラクターと会話することが主題のVRゲームで「プレイヤーはフックショットで移動」という実装になっていると「なんでそんな実装したんだよ」と思わず突っ込みたくなりますが、本当にそういう事故が起こる可能性はあるのです。移動方法が汎用の手段でよいかそうでないか、コンテンツの開発前に十分に検討しておきましょう。
カメラの操作と工夫
カメラ制御はVRでもっとも注意したい箇所の1つです。ここでいうVRにおけるカメラ制御とは「プレイヤーが顔を動かしてない状態で、プレイヤーのコントローラーの操作に応じてVRコンテンツ側がプレイヤーの視界の向きを変える処理」を指します。
プレイヤーの視界がそのままカメラになり、見たいところがあるならその方向に顔を動かせばいいだけのVRでなぜカメラ制御が必要かというと、椅子に座ってプレイしているなど、プレイヤーが必ずしも自由に360度を見渡せる環境だとは限らないからです。仮に自由に動き回れる環境だとしても「首を左右に振り回す労力は省きたい」という趣向のプレイヤーも少なくありません。また、VRデバイスによってはPCや家庭用ゲーム機に有線で接続している場合があり、有線接続の状態でプレイヤーがぐるぐると動き回るとケーブルが絡んでプレイヤーが足をひっかけて事故を起こす原因にもなりえます。
また、VRでカメラを制御する場合は「どのようにしてカメラを左右に旋回するか」という話になり、上下などそれ以外のカメラの制御方法についてはあまり検討されたり実装されたりしていません。これについてはのちほどあらためて解説します。
なお、プレイヤーの移動手段がルームスケ-ルの場合はカメラの制御そのものが不要です。これはプレイヤーがコントローラーでカメラを操作した時点で、そのVR空間は「プレイヤーの現実の空間に準拠した空間」ではなくなってしまうからです。
スナップターン(Snap Turn)
スナップターンは一定の角度で瞬時に旋回するカメラ制御のことで、一般的には30度、45度、60度、90度から選べます。後述のスムーズターンが多くの人にとってVR酔いを引き起こすために考案された対策の1つで、今ではほとんどのVRゲームがスナップターンを標準として実装しています。スナップターンとスムーズターンの折衷案「クイックターン(一定間隔をスムーズに高速回転) 」を実装している例もあります。
UnityではVRのカメラ操作が標準でスナップターンになっています(図11 ) 。
図11 スナップターンの設定
スナップターンのカメラの回転角度を調整する場合はComplete XR Origin Set Up -> XR Origin (XR Rig) -> Locomotion -> Turnの中のスクリプトであるSnap Turn Provider (Action Based)にあるTurn Amountの数値を調整しましょう。TurnAmountの数値をスクリプトから制御(プレイヤーがオプションで設定変更できると望ましい)するには“ SnapTurnProviderBase.cs” のpublic float turnAmountにアクセスしましょう。
スナップターンを無効化したい場合は、Complete XR Origin Set Up -> XR Origin (XR Rig) -> Locomotion System -> Turnの中にあるSnap Turn Provider (Action-based)の、Enable Turn Left Right(左右への旋回を有効化する)のチェックマークを外してください。
また、Unityは標準で「左右の旋回だけでなく瞬時に真後ろに視界を向ける機能(Enable Turn Around) 」が搭載されていますが、筆者の知る限りこの機能を搭載しているVRコンテンツはほとんどありません(意図して後ろを向くことのできるメリットよりも操作ミスによる方向感覚の喪失のリスクが大きいためではないか、と筆者は予想しています) 。特に必要がなければEnable Turn Aroundのチェックを外しておきましょう(図12 ) 。
図12 Enable Turn Around
スムーズターン(Smooth Turn)
家庭用ゲーム機では伝統的なカメラの制御方法である「右スティックを倒した方向にカメラがスムーズに回転する」は2000年に発売された『Halo: Combat Evolved』をきっかけに普及し始めましたが、VRゲームの黎明期はこれを真似してVR酔いで撃沈する人が続出しました。スムーズ移動とは違って、いくらVRゲームをプレイして経験を積んでもスムーズターンに耐性が付かない人の方が多いので、スムーズターンだけ実装したVRゲームを作るとプレイヤーが耐えられずにプレイを止めてしまうでしょう。
だからといって「スムーズターンはVRにおいて悪だ」という話ではありません。スムーズターンに耐性のある人もいるので選択肢としては用意した方がよいですし、動画撮影が目的の場合はスムーズターンの方が都合がよいです(正直なところスナップターンが映像として見栄えが悪いのは否めません) 。プレイ動画の撮影はゲーム実況者だけでなく、開発者自身がプロモーションのために必要とする場合もあります。また、物理演算重視のVRゲームはカメラの回転制御の初期設定がスムーズターンになっていることも多い傾向にあります。
先述の通りUnityではVRのカメラ操作が標準でスナップターンになっているため、スムーズターンに切り替える場合はComplete XR Origin Set Up -> XR Origin (XR Rig) -> LeftControllerとRightControllerの中にあるスクリプト「Action Based Controller Manager」のLocomotion Settings -> Smooth Turn Enabledにチェックを入れて有効化します。ただし、スムーズターンを無効化するとスナップターンに切り替わる仕様のため、カメラの旋回そのものを無効化したい場合はスムーズターンとスナップターンの両方を無効化してください(図13 ) 。
図13 SmoothTurnEnabled
スムーズターンのカメラの回転速度を調整する場合はComplete XR Origin Set Up -> XR Origin (XR Rig) -> Locomotion -> Turnの中のスクリプトであるContinuous Turn Provider (Action Based)にあるTurn Speedの数値を調整しましょう。TurnSpeedの数値を外部からアクセス(プレイヤーがオプションで設定変更だと望ましい)するには“ ContinuousTurnProviderBase.cs” のpublic float turnSpeedにアクセスしましょう(図14 ) 。
図14 回転速度の調整
ビネット(Vignette)
ビネットは正確にはカメラ制御ではありませんが、VRコンテンツに必須の要素なので解説します。ビネットはプレイヤーがVRゲーム内でスムーズ移動など非現実の手段で動いているときに視界を狭めることで情報量を削減し、VR酔いを予防する策の1つです。一般的にVRコンテンツでビネットを有効化するとプレイヤーの視野の周辺が黒色などで塗りつぶされ、視野が狭まります。「 ビネットで視界が狭まると興ざめする」というプレイヤーも少なくないため、オプションでビネットの有無や強度を決められるとよいでしょう。
UnityではComplete XR Origin Set Up -> XR Origin (XR Rig) -> Camera Offset -> Main Camera -> TunnelingVignetteにビネットのプレハブが入っており、“ Tunneling Vignette Controller.cs” のコンポーネントからビネットの色や拡縮速度、ディレイなどのパラメータを調整できます(図15 ) 。場合によってはMain Cameraの中にビネットのプレハブが入っていないことがあるので、その際はMain CameraにTunnelingVignetteのプレハブを突っ込むことで対応できます。
図15 ビネットの調整
オリジナリティのあるカメラ操作
実のところ、VRのプレイヤーの視界=カメラなので、VRゲーム側が「単純な左右の旋回」を除いてカメラを制御することはめったにありません。VRゲーム側がカメラを制御することとはプレイヤーの首根っこを押さえて任意の方向に曲げることと等しいからです。しかし、まったくないわけでもありません。
ロックオン
ビデオゲームの三人称視点のアクションゲームでは「敵キャラクターなどのターゲットをロックオンすることで、プレイヤーキャラクターとターゲットの両方が画面内に写り続けるよう自動的にカメラが回転しつづける」という実装が頻繁に見られます。
ただし、一人称視点のゲームでロックオンが実装されることはまずありません。一人称視点でプレイヤーの意に介さずカメラが回転しつづけると画面に映るものがまったく把握できなくなって酔う危険性が高まるからであり、一人称視点のゲームは視界の操作そのものがゲームの遊びと直結しているのでカメラの操作を自動化する意味がないためです(三人称視点でもシューターの場合はロックオンが実装されることはまずありません) 。
VRコンテンツも一人称視点なのでロックオンが実装されることはほぼありませんが、うまく行く場合もあります。ロボット系(ないしそれに影響を受けたもの)のVRコンテンツだとロックオンを実装している例が多いです。
上下の旋回
VRゲームのカメラの回転で「上下の旋回」はめったに行われません。ほとんどの場合、上下方向の視界はプレイヤーが実際に首を上か下に向けるだけで充分だからで、上下への旋回がスティックで行えるVRゲームもほぼありません。Unityでもカメラ操作を上下に旋回させる方法について公式が用意していないほどです。
ただ、筆者が知る限りでは『Mission: ISS 』という国際宇宙ステーションを再現したVRコンテンツで視界の上下旋回が実装されています。国際宇宙ステーションは無重力ゆえに床や天井といった概念がなく、360度の方向に何かしらの機能が実装されているためです。このVRコンテンツは本当にVR酔いを引き起こす可能性が高いので、注意してプレイしてください。重力に縛られた地球で平面の地形に暮らしている人類には、上下方向の旋回に慣れるにはまだまだ時間がかかることが実感できます。今のところ『Mission: ISS』のカメラ制御をフォローしたVRコンテンツを筆者は見たことがありません。
最低限守るべき酔い対策
最後に、この記事の読者に絶対に覚えてほしいVR酔い対策についてアドバイスさせていただきます。VR酔い対策には様々なテクニックがありますが、以下の2つを死守すればたいていのVR酔い対策はほとんど完了します。
プレイヤーに無断でカメラを動かしてはいけない
ロックオンの説明でも触れましたが、VRにおいてカメラはプレイヤーの視界であり、ソフト側でVRのカメラを動かすのはプレイヤーの頭を押さえつけて強制的に動かしているのとほとんど同じことをしています。このため、一般的なビデオゲームで見られる「開発者がプレイヤーの見せたいものにカメラを向ける」とか「ヒットストップなどカメラの揺れが伴う演出」といったビデオゲームの常套手段はほぼ使われません(ゼロでもありません) 。
ただ、動かしてはいけないわけではなく、適切な誘導が施してプレイヤーとの合意が取れていればプレイヤーの体験を向上させることもできます。一般的に車に搭乗している人間のうち車を運転している運転手が酔わないのは自分で運転しているからなのと同じで、カメラの主体であるプレイヤーの意図とVRコンテンツの挙動が一致していればよいのです。
フレームレートは何があっても死守しなければならない
映像には「一秒間に映像が何回更新されるか」を示すフレームレート(FPS, Frame Per Second)という概念があり、一般的なビデオゲームでは一秒間に60FPSが理想、最低でも30fpsが必要(一部のPCゲームやeSportsでは144fps以上が推奨)とされています。
VRではプラットフォームにより異なるものの、Meta QuestではMetaのレギュレーションによって最低72fpsを維持することが求められます。それよりも下がったらMeta Questのストアでリリースできなくなります。PSVR2では60FPS(を疑似的に120FPSに見せるリプロジェクション補正) 、90FPS、120FPSのいずれかが基準となります。また、「 普段はフレームレートが安定しているが一瞬だけ急激にフレームレートが低くなる」もチェック対象となります(その割にはセーブ・ロードの周辺でフレームレートが不安定になるVRコンテンツがけっこうあるのも事実ですが……) 。
もしVRコンテンツの開発中に「なんだかフレームレートが不安定だなあ」と思ったら、すぐに原因を特定して何が何でも対応してください。これを怠るとプレイヤーが健康を損ないますし、何よりプラットフォームの審査に引っかかってリリースできなくなります(開発者はついつい自分の作っている製品の不備に慣れてしまいますが、プレイヤーはそうではありません) 。フレームレートの低下要因はCPU依存の場合とGPU依存の場合があり、Unityのプロファイル機能を用いることで原因を特定することができます。詳細はMeta公式のドキュメント「テストとパフォーマンス分析」 を参照してください。
ちなみに、VR系のメタバースではフレームレートが極端に低い(30~40フレームレートが“ 比較的よい” とされる)ことが珍しくないですが、これは「あらゆる不特定多数のプレイヤーが自分の作ったアバターやワールドを投稿、利用できる」という性質によって起きており、原理的かつプレイヤーの需要的に防ぎようがない不具合でもあります。そのような場合でもあなた自身が自分のVRコンテンツの最適化を怠らず手入れをしつづければ、きっと誰かのVRの体験をよりよいものにすることに繋がるはずです。