Unity2020からLegacyなXR機能が削除され、XR Plugin Managementを必ず使わなければいけなくなりました。なので、今回はその導入についてを書きます。
なお、基本的にはOculusQuest公式ドキュメントに書いている内容に沿っているだけとなります。
環境
- Windows10
- Unity2020.1.0f1*1
- XR Plugin Management v3.2.13
- Oculus XR Plugin v1.4.0
- Oculus Integration v18.0
- OVRPlugin v1.50.0
- Universal RP v8.2.0
- OculusQuest v18.0
Oculus XR Plugin v1.3.4 では起動時にBlack Screenになってしまったため、v1.4.0 にアプデして使用しています。
Unityプロジェクトを新規作成
新規プロジェクトを「Universal Project Template」にして作成します。
必須のUnity設定
OculusQuest向けにビルドするためには以下の設定が必須となります。
- File > Build Settings から、Androidを選択してSwitch Platformボタン押下でAndroidに切り替える
- Texture Compression項目をASTCに変更
- 同じくBuild Settings上からPlayer Settingsボタンを押下し、Player Settingsビューを表示
- 左メニューでPlayerが選択されている状態でAndroidタブを選択し、Settings for Androidを表示してOther Settings > Identification > Package Nameを変更する
Quest端末上でこの値が同一のアプリはインストール出来ないため他者と被らないユニークな値になるようにしてください
それ以外の設定として以下をお好みで変更します。
Player Settings
Edit > Project Settings > Player の以下の各設定を必要に応じて変更します。
Quality Settings
Edit > Project Settings > Quality の以下の各設定を変更の必要があれば変更ください。フレームレートや発熱に問題がなければ特に変更する必要はありません。
- Edit > Project Settings > Player > Android の画面上部のAndroid列にあるDefaultをクリックする事で、Defaultの負荷設定を選択可能
もし細かく設定したい場合は以下の項目を見直すと良いでしょう - RenderingにURPのQualitySettingを設定
テンプレートプロジェクトの Assets/Settings には High/Medium/Low の3種類が存在します。細かい設定はInspector上からも行えます - Texture QualityはデフォルトだとFull Resになっており、この設定ではTextureを最大サイズで表示する
負荷軽減のためにSizeを半分(Half Res)にする対応が行えます - Anisotropic Texturesは異方性フィルタリングの設定項目
正面以外から見たときのTexture質を上げる設定で、不要であればDisabledにする事で負荷軽減に繋がります
XR Plugin Managementのセットアップ
Unityが提供しているXR向けPluginをセットアップしていきます。
- Player Settings > XR Plug-in Managerを選択し、Install XR Plugin Managementボタンを押下
- Plug-in ProvidersにあるOculusにチェックを付ける
- Player Settings > XR Plug-in Manager > Oculusを選択し、設定内容を確認して設定変更の必要があれば変更
もし追加後にXR Plugin Management/Oculus XR Pluginをアップデートしたい場合はPackage Managerから行います。
該当Pluginに「See other versions」ボタンがあれば、他バージョンをインストール可能です。無ければどうしようも無いので諦めます。
Oculus Integrationのセットアップ
Oculusが提供しているOculus製品に使えるPluginをセットアップしていきます。
- UnityEditorのメニューから、Window > Asset StoreでAsset Storeビューを開く
- Oculus Integration で検索してプロジェクトへインポート
インポート対象は最低限ならVRとOculusProjectConfig.assetだけで良いです - Projectビューから、Oculus > VR > PrefabsにあるOVRCameraRig/OVRPlayerControllerのどちらかを、Hierarchyへ追加する
OVRCameraRigはMain CameraがVR対応された3人称視点タイプのカメラ
OVRPlayerControllerはカメラをPlayerとした一人称視点のカメラで、コントローラでの移動と回転にも対応。確認用としては後者を追加するのがオススメです - Hierarchyビューから既存カメラを削除
Oculus Questへデプロイ
ここまでの設定が問題無いかを確認するために、Questへアプリをインストールして起動してみます。なお、以下手順の1-2はOculusQuest本体設定なので1度行えば以降は設定を弄る必要がありません。
- スマホアプリのOculusを起動し、デプロイしたいQuestの設定を開く
- 設定一覧にある 開発者設定 を選択し、開発モードをONに切り替える
- UnityEditorのメニューから、Oculus > OVR Build > OVR Build APK And Run を選択するかCtrl+Kショートカットで実行します
この方法は通常のBuildSettingsからapkを作成するよりも速いです。 - UnityEditorのConsole上でインストールまで完了しているログを確認した上で、Questをかぶる
もしアプリが起動していなかった場合はアプリ検索から提供元不明のアプリに絞ってアプリを起動
アプリがビルド出来ない場合はUnityEditorのConsoleを確認。Questでアプリ起動するが正常起動しない場合はAndroidStudioのLogCatを確認してみてください。
コントローラー対応
長くなるので後日別記事として書く予定です。
FPS90を目指すために使えるOculus API
VRはプレイヤーを酔わせないために一番重要視されているのがFPSです。FPS90出るような調整が必要で、そのためにOculusが用意している機能のアレコレが書かれてあるOVRManagerコードに目を通しておくと良いです。
まとまっていつかブログにも書きたいと思います。
3Dモデルがピンク色になる
UniversalRP対応がされていないShaderを使っていると正しく描画されません
移行方法については過去に書いた以下を参考にしてください
hyoromo.hatenablog.com
スクリーンショットの撮り方
撮影方法
現時点で方法は2通りあります。
右コントローラーのOculusボタンを押下してメニューを表示し、シェアタブから「写真を撮る」を選択して5秒後くらいに撮影されます。
もうひとつは隠し機能として話題になった方法です。OculusQuestが最新(おそらくv18以上)且つ、v18であればQuestのホームから「設定 > テスト機能 > ベータリリース」をオンにします。
撮影したい画面上で右コントローラーのOculusボタンを押下した後、左右どちらかのコントローラーで人差し指トリガーを引きます。この時、Oculusボタンの押下時間が長いと別アクションの向きリセットが行われてしまうためトリガーを引いても撮影出来ません。
エラー
Pluginバージョンによる問題
XRに関するPluginをいくつも入れる事によって発生する依存関係によるエラーが発生する場合があります。
私の方で発生したのはアプリ起動しても画面が真っ黒で、LogCatには以下のエラーが発生している状況でした。
DllNotFoundException: OculusXRPlugin
at (wrapper managed-to-native) Unity.XR.Oculus.OculusLoader.SetUserDefinedSettings(Unity.XR.Oculus.OculusLoader/UserDefinedSettings)
原因は XR Plugin Management 上での操作でインストールした Oculus XR Plugin が v1.3.4 であった事で、こちらを v1.4.0 にアップデートする事で解決しました。
単にセットアップしただけでDllNotFoundExeptionが発生してしまう場合は、XR Plugin Management/Oculus XR Plugin/Oculus Integration/OVRPlugin を怪しんでみてください。OVRPluginはOculus Integration内に存在するので、Projectビューから検索すれば発見出来ます。