なんとかUnity で Oculus の世界を作ってみることができました。

上のgif は圧縮したせいで少しきたなくなってしまいましたが、実際にはとてもきれいな世界です。

ここでは、参考にさせていただいたブログや動画を、備忘録としてメモします。

開発環境
+ windows 11
+ Oculus2
+ Oculus Link (USB3)

Unity でOculus の世界を作る1 ~デフォルトの世界~

以下が参考にさせていただいたブログです。

FRAME SYNTHESISさんのブログ、Unity + Oculus Quest(Meta Quest)開発メモ

このブログのなかで、Oculusを開発者モードにするという手続きがありますが、詳しくはこちらが参考になりました。

Unity の設定に関しては、ブログで紹介されているyoutube動画がわかりやすかったです。

以下、動画を一度見た後のために要点をまとめました。

Unity 2020.1.3.f1 をUnity Hubからインストール

インストールの際は、以下にチェックを入れること
+ Android Build Support
+ Android SDK & NDK Tools
+ OpenJDK

Unityの基本設定

+ File > Build Settings > Android
+ Texture Compression > ASTC を選択
+ Switch Platformを押す
+ Project Settingsを押す
+ Player > Other settings > colorspace > linear を選択
+ Player > Other settings > Vulkan 削除
+ Player > Minimum API Level > 23 を選択
※アプリとしての審査を通すには、Scripting Backend > LL2CPP、ARM64 にチェックが必要だが、ビルドが長くなるのでここではそのまま。

Asset Store からOculus integraionをインポート

+ Window > Asset Store
+ Oculus Integration を検索
+ import の際には、Avater、LipSync、Sample Framework を除外して早くする。
+ 途中、Pluginの更新はYes、Upgratde を選んで、Restartを選び、Unityを再起動。

例えば、以下のOculus用のScenesをロード。
+ Asserts > Oculus > VR > Scenes > ControllerModels 

XR Plug-in インストール

+ Window > Package Manager
+ XR Plugin Management をinstall
+ Oculus XR Plugin をinstall

+ Edit > Project Settings > XR Plug-in Management
+ アンドロイドタブ > Oculus にチェック
+ モニタータブ > Oculus にチェック

+ Edit > Project Settings > XR Plug-in Management > Oculus
+ アンドロイドタブ > Stereo Rendering Mode > Multiview
+ モニタータブ > Stereo Rendering Mode > Sigle Pass Instanced

実行

+ Oculus をPCに接続(自分はOculus Link、つまりUSB3)した状態にして、Unity をPlay。
+ Oculus で、以下のようなUnityの世界に入れる。

ビルド

+ File > Build Settings > Android > Build and Run
適当にファイルに名前を付けてOK。しばらくすると、Questでアプリが動く。

Unity でOculus の世界を作る2 ~自分で作った世界~

基本の設定

以下のブログを参考にさせていただきました。

【VR】ド素人と始めるVR開発【Quest2】Part1 環境構築からビルドまで

要点は、
+ 自作シーンを作る
+ MainCameraを削除
+ Assets > Oculus > VR > Prefabs > OVRCameraRig を Hierarchyタブにドラッグ

です。他、コントローラを表示させる方法も参考になりました。

赤いボールが跳ねる世界

自分が作った世界は、赤いボールが空中で2秒ごとに生まれ、しばらくすると消えていくというものです。

Unity のスクリーンショットはこちら。

Planeには芝生のテクスチャをアタッチしました。scaleは、x=10, y=1, z=10です。

Sphereはprefabで、Scale1のsphereに、赤のマテリアルを付けたものです。
床で跳ね返るように、Rigidbody をアタッチし、Physic Material(Dynamic Friction 1, Static Friction 0, Bounciness 0.6)を関連付けています。

Sphereというprefabにアッタッチしたコードはこちら。10秒後に消すコードです。

空のGameObjectを作り、GameMasterという名前にし、赤いボールを生成するために以下のコードをアタッチしました。
objPrefab には、Sphereを関連付けます。