なんとか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秒ごとに生まれ、しばらくすると消えていくというものです。
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秒後に消すコードです。
1 2 3 4 5 6 7 8 9 10 11 |
using UnityEngine; public class DestroyObj : MonoBehaviour { public float deleteTime = 10.0f; void Start() { Destroy(gameObject, deleteTime); } } |
空のGameObjectを作り、GameMasterという名前にし、赤いボールを生成するために以下のコードをアタッチしました。
objPrefab には、Sphereを関連付けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using UnityEngine; public class GenerateSphere : MonoBehaviour { public GameObject objPrefab; public float interval = 2.0f; void Start() { InvokeRepeating("GenerateObj", 0.1f, interval); } void GenerateObj() { Quaternion rot = Quaternion.Euler(0, 0, 0); var rx = Random.Range(0f, 1.0f); var rz = Random.Range(0f, 1.0f); Vector3 pos = new Vector3(rx, 10.0f, rz); Instantiate(objPrefab, pos, rot); } } |
コメントを残す