Unityレースゲームの作り方10 Oculus Quest 2(Meta Quest)でVRレーシングゲームを作る

Unity C# レースゲームの作り方 (PC・スマホ・VRクロスプラットフォーム開発チュートリアル)


Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

本講座はここまででUnityで3Dレースゲームの作り方を解説してきました。

前回の記事 :

Unity レースゲームの作り方9 スマホに移植してモバイルレーシングゲームを完成させる
本講座ではUnityとC#を使ってレースゲームを作る方法について解説しています。今回は第九回となります。 前回まででレースゲームに必要な一通りの機能を作成し、PCで操作できるようにしてきました。 前回の記事 : 今回は簡易的ではあ...

ここからは、作ったPC・モバイル対応のゲームを元にしてVRのHMD(ヘッドマウントディスプレイ)である、「Oculus Quest2(Meta Quest2)」でのVR対応をするための記事となります。


【Line登録者限定のプレゼントもあるよ!】

前提

今回使用するのは、

  • Unity 2020.3.16f1
  • Oculus Quest 2 (Meta Quest 2)

です。

「Oculus Quest 1」でも追試しましたが同じように動きます。「Oculus Go」「Oculus Rift」に関しては、コントローラーの違いなどがありますので、同じように作れないのでご注意ください。

また、Unityのバージョンによっても設定方法が変わる可能性があるので、注意してください。

関連記事:【入門】Oculus Quest用のアプリをUnityで作成する方法(旧式)

Oculus Questの導入

では「Oculus Quest2」で動かすための準備をしていきます。

アセットのインポート

まずは、アセットストアで「Oculus Integration」というアセットをインポートしましょう。

通常通り、「ダウンロード→Unityで開く→パッケージマネージャーでインポート」でインポートできます。

この後出てくるものを全部importボタンを押してインポートします。

Build Setting

次に「File→Build Setting」で「BuildSetting」を開きます。

「Oculus Quest2」は「Android」で動きますので、まずは左下「Platform」を「Android」に変更します。

次に「Texture Compression」を「ASTC」に変更します。(「RunDevice」を「Oculus Quest2」に変更します(しなくても大丈夫です)。)

この段階で、エラーで「PlayerController」の名前が出ているかと思います。これは今回のレースアプリで作成した「PlayerController.cs」の名前がインポートしたアセット(VR用のアセット)にあるスクリプトと被っているためなので、名前を変更していきましょう。

まず、「PlayerController.cs」(今回作成したプレイヤーの車のコントロールスクリプト)を「PlayerCarController.cs」と変更します。次にファイルを開いて、クラス名を「PlayerCarController」に変更、あとはこれを参照している「GateController.cs」「GameController.cs」内の「PlayController」を「PlayerCarController」に変更すればOKです。

Project Setting

次に「Project Setting」を開きます。

左側の一覧の下の方、「XR Plugin Management」をクリックして開きます。最初は画像のようにインストール画面がでますので、「Install XR Plugin Management」を押しましょう。

インストールが完了すると、下記のような画面になりますので、「Plug-in Provider」で「Oculus」のチェックを入れ、「Initiallize XR on Startup」にもチェックを入れます。

また、「Android(ロボットマーク)」と「PC(ディスプレイマーク)」に同じ項目があるので両方同じようにしましょう。(iOSにはありませんのでしないで大丈夫です。)

 

次に「Project Setting 」の左の一覧で「Player」を選択します。

タブで「Android(ロボットマーク)」を選択します。

「Other Setting」の「Rendering」項目の一番上「ColorSpace」を「Liner」に変更します。

その下「Auto Graphics API 」のチェックをはずし、その下のリストで「Vulkan」が上に来るように並び替え、もしくは「Vulkan」以外のものを消してしまいましょう。

ここの設定で「Vulkan」ではなく「OpenGLES3」を設定するように解説している場合もあります。「Vulkan」はUnity 2021.2から安定版になったようなので、それ以前のUnityバージョンを使用している場合、もしくは「Vulkan」でビルドしても真っ暗のままの場合は「OpenGLES3」を試してください。

少し下の「Identification」項目の「Minimum API Level」を「Android 6.0 Marshmallow (APIレベル23)」に設定。

さらに少し下にある「Configuration」項目の「Script backend」を「IL2CPP」に変更。

その少し下「Target Architecture」の下のチェックマーク「ARMv7」のチェックを外し、「ARM64」をチェックします。

以上で設定の完了です。

デモシーン

まずはアセットですでに作成されているサンプルをビルドしてみましょう。

サンプルシーンを開きます。「Assets/Oculus/VR/Scenes/ControllerModels.unity」です。

すると下記のようなシーンが開きます。(テスト用なので他のシーンでもOK)

細かいことは気にせずに、「BuildSetting」を開いて、「Add Open Scenes」を押して開いているシーンをビルドに含めます。

先にビルドに入っていた「MainScene」は一旦チェックをはずしておきましょう。これで「0」マークが「ControllerModels」シーンの横についたかと思います。この番号がビルドにおける順番(インデックス)になり「0」が起動時のシーンになります。

開発者モード

Oculus Quest2は「Android」OSでの開発になりますので、Oculus Quest2の開発者モードをオンにする必要があります。

公式サイトを参考に設定しましょう。

https://developer.oculus.com/documentation/native/android/mobile-device-setup/?locale=ja_JP

ここでは簡単に解説していきます。(Oculusアプリのバージョンなどにより操作が変わる可能性がありますのでご注意ください)

  1. お使いのスマホで「Oculus」アプリをインストール、起動
  2. Oculus Quest2をペアリング
  3. 画面下の一番「メニュー」をタップ
  4. 並んでいるアイコンの「デバイス」をタップ
  5. Oculus Quest2の接続がなかったら電源を入れ接続(接続済みが表示されているのを確認)
  6. 下の方の「ヘッドセットの設定」のうち「開発者モード」を選択
  7. facebookログイン、団体、企業の作成されていない場合は、作成を求められるので作成、ログイン
  8. 開発者モードをオン

以上になります。

VRアプリのビルド

では、PCにOculus Quest2をPCに繋ぎます。この時Oculus Quest2ないでアクセス許可ウインドウがでている場合がありますので確認しておきましょう。

その後Unityで「Build And Run」を押します。

成功したらHMDでデモシーンを見渡して、コントローラーが表示されているのを確認しましょう。これでビルド準備ができました。

 

レースシーンの改造

ではここから、レースゲームをVR用に改造していきます。

ここからスクリプトの内容を削除したり変更したりして改造していきますので、以前のものを残しておきたい場合はコピーして名前を変更したりして保管しておいてください。

レースシーンのビルド

まずは、「Assets/AppMain/Scenes/MainScene」をコピー(Mac:command + D / Win : ctrl + D)して、名前を「VRScene」とします。これを開きましょう。

Gameウインドウの解像度はやりやすいようにで構いませんが、「2000×2000」など正方形にしておくといいでしょう。UIが崩れているかと思いますがVR上でこのUIは使えないので今は放っておいてOKです。

次に、Projectウインドウで「Assets/Oculus/VR/Prefabs/OVRCameraRig.prefab」をVRシーンのHierarchyにドラック&ドロップします。

これは、VR用のカメラになりますので、今まであった「MainCamera」を非表示にします。また「PlayerContoller」処理の方もコメントアウト、または削除して無効にしておきましょう。

無効にするのは以下の記載です。

 

これでカメラの追跡がなくなりました。

では、ビルドしてみましょう。

現在開いているシーンをビルドしたいので、まずは「Build Setting」を開いて「Add Open Scenes」をクリックしてビルドに含めます。そして、左のチェックマークで「VRScene」以外は無効にしましょう。

「Oculus Quest 2」を繋いで「Build And Run」をクリックします。(初回は結構時間がかかります)

カメラの置いている位置次第ですが、とにかくビルドができて周囲を見渡したらコースがみえたらOKです。(操作はできません)

カメラの移動

このままだと流石につまらないので、カメラを移動します。

本来操作しているプレイヤーの車に乗せたいのですが、操作処理を作成していないのでCPUにのせてVR感を楽しんでみましょう。

まずはVRでは映らないHierarchyの「Canvas」をとりあえず非表示にします。あとで調整します。

そして、シーンに置いた「OVRCameraRig」を「CPU」の子「Dolly Cart1」のさらに子「Free_Racing_Car_Red」の子に配置します(RigidBodyとコライダーがついている車の子)。

そして「OVRCameraRig」を選択しInspectorのTransformで下記のように設定します。

ここまで作成するとUnity上では下記のようになります。

では、ビルドしてみましょう。

これで、CPUの車からみているような視点で動くかと思います。人によっては結構酔いますのでご注意ください。

 

VRのUI表示

今まで作成したUIが映らないのはここまで解説しました。

通常のゲームのUIは画面に貼りついている形になるので、VRの場合眼球に張り付く・・・無理ですね。この場合眼球(つまりカメラ)からUIまでの距離が必要になります。

イメージ的には2.3m先の看板を見たりしているイメージです。もちろん看板としてGameObjectを作成してもいいのですが、常に視界に入って欲しいUIもあるので、どうやってそのようなUIを作成するかを解説します。

まずは、先ほど非表示にしたHierarchyで「Canvas」オブジェクトを選択して、Inspectorの「Canvas」コンポーネントを見てください。

「RenderMode」という項目の「ScreenSpace – Overlay」となっているところを選択し「World Space」 に変更します。

これは下記のような意味になります。

ScreenSpace – Overlay ScreenSpace、つまり画面に張り付くスクリーンにUIを描写。
ScreenSpace – Camera ScreenSpace、つまり画面に張り付き、特定のカメラにUIを描写しカメラの設定の影響を受けます。
World Space UIをゲームオブジェクトと同じように描写します。一枚の板(キャンバス)にUIを表示しているように扱い、それをゲーム空間(WorldSpace)に配置します。

 

次に「Canvas」の調整をします。

まず、Hierarchyの「Canvas」を「CPU/Dolly Cart1/Free_Racing_Car_Red/OVRCameraRig/TrackingSpace/CenterEyeAnchor」の子にドラック&ドロップして子に配置します。

「CenterEyeAnchor」というのはVRの視線にあたるものだと思ってください。

次に、「Canvas」の「RectTransform」を下記のように設定します。

もしUIが出てくる位置がずれていたらPosXとPosYの位置を修正してください(pivotの位置はこのサンプルでは0.5, 0.5になっています)。

最後に「Canvas」コンポーネントの「Event Camera」に「CenterEyeAnchor」をドラック&ドロップしましょう(今は使いません)。

ここまでできるとUnity上では下記のようになります。

今Gameウインドウの真ん中に小さめに映ってる四角が、自分から前方2mあたりに浮いている透明の看板、みたいなイメージです。

では一旦ビルドしてみましょう。

これが、VRのUIの基本の一つです。このように視界に入るところに置きます。UIまでの距離感や大きさはまた調整しますが、ご自身のやりやすいようにしていくといいでしょう。

 

コントローラーの表示

今回はコントローラーはあくまで操作のためにボタンの入力などを取得できればいいのですが、今後のためにコントローラーをゲーム内に表示できるようにしておきましょう。

これは簡単です。「OVRCameraRig」の孫に「Left(Right) Hand Anchor」があり、その子にそれぞれ「Left(Right) Controller Anchor」がありますのでその子にProjectウインドウから「Assets/Oculus/VR/Prefabs/OVRControllerPrefab.prefab」をドラック&ドロップします。

そして配置した「OVRControllerPrefab」のInspector「OVR Controller Helper」の「Controller」の項目で「L Touch」「R Touch」をそれぞれ選択しましょう。

以上です。

この段階では実際のコントローラーを持つ手の動きに合わせて、VR空間内でも手が動くというだけですが、他のゲームを考えると色々な使い方ができますね。

関連記事:【VR】Oculus Questのコントローラから球を出す/物体をつかむ/レイで物体をつかむ

【VR】Oculus Questのコントローラから球を出す/物体をつかむ/レイで物体をつかむ
今回はオキュラスクエストの使い方を習得するための練習を行っていきましょう。 コントローラを表示させて、コントローラで弾丸を撃つ、物体をつかむ、レイを出す処理を作成していきます。 前回の記事: コントローラの表示 前回...

ちなみに同じフォルダに手のプレハブもありますので、興味ある方は入れ替えてみましょう。

今回はここまでです。

次回これらを使用して車を動かしたりUIの調整をしていきましょう。

次回の記事 : 

Unity VRレースゲームの作り方11 VRゲーム用入力処理・UI・酔い対策の実装
本講座では、Unityで3Dレースゲームの作り方を解説してきました。今回は第11回目になります。 そして前回VR対応の導入を解説しました。 前回の記事 : 前回解説したVRでの開発方法を使って、今回の記事ではゲームをちゃんとVRに...

 

Unityレースゲームの作り方チュートリアル講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

タイトルとURLをコピーしました