hyoromoのブログ

iOS/AndroidもしくはUnityネタを書いています

Unity2020.1にてURPプロジェクトでのOculusQuest向け開発準備

f:id:hyoromo:20200725053025j:plain
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プロジェクトを新規作成

f:id:hyoromo:20200724184621j:plain:w500
新規プロジェクトを「Universal Project Template」にして作成します。

必須のUnity設定

OculusQuest向けにビルドするためには以下の設定が必須となります。

  1. File > Build Settings から、Androidを選択してSwitch Platformボタン押下でAndroidに切り替える
  2. Texture Compression項目をASTCに変更
    f:id:hyoromo:20200724190914j:plain:w400
  3. 同じくBuild Settings上からPlayer Settingsボタンを押下し、Player Settingsビューを表示
  4. 左メニューでPlayerが選択されている状態でAndroidタブを選択し、Settings for Androidを表示してOther Settings > Identification > Package Nameを変更する
    Quest端末上でこの値が同一のアプリはインストール出来ないため他者と被らないユニークな値になるようにしてください

それ以外の設定として以下をお好みで変更します。

Player Settings

Edit > Project Settings > Player の以下の各設定を必要に応じて変更します。

  • Other Settings > Rendering > Color Space のデフォルトは「Linear」になっており、必要に応じて「Gamma」に変更する
  • Other Settings > Configuratioin > Scripting BackendをIL2CPPに変更する
    ビルド時の変換方法が変わる事で、パフォーマンスが向上します。代わりにビルド時間が伸びます
  • Configuration > Api Compatibillity Levelを.NET 4.xに変更する
    .NET 4 APIが使えるようになります
Quality Settings

Edit > Project Settings > Quality の以下の各設定を変更の必要があれば変更ください。フレームレートや発熱に問題がなければ特に変更する必要はありません。

  • Edit > Project Settings > Player > Android の画面上部のAndroid列にあるDefaultをクリックする事で、Defaultの負荷設定を選択可能
    もし細かく設定したい場合は以下の項目を見直すと良いでしょう
    f:id:hyoromo:20200620194052p:plain
  • RenderingにURPのQualitySettingを設定
    テンプレートプロジェクトの Assets/Settings には High/Medium/Low の3種類が存在します。細かい設定はInspector上からも行えます
  • Texture QualityはデフォルトだとFull Resになっており、この設定ではTextureを最大サイズで表示する
    負荷軽減のためにSizeを半分(Half Res)にする対応が行えます
  • Anisotropic Texturesは異方性フィルタリングの設定項目
    正面以外から見たときのTexture質を上げる設定で、不要であればDisabledにする事で負荷軽減に繋がります
それ以外の設定
  • Oculus > Tools > Create store-compatible AndroidManifest.xml を選択する事で、Assets/Plugin/Android/AndroidManifest.xml に新規作成される

XR Plugin Managementのセットアップ

Unityが提供しているXR向けPluginをセットアップしていきます。

  1. Player Settings > XR Plug-in Managerを選択し、Install XR Plugin Managementボタンを押下
    f:id:hyoromo:20200620201631p:plain
  2. Plug-in ProvidersにあるOculusにチェックを付ける
    f:id:hyoromo:20200620201822p:plain
  3. Player Settings > XR Plug-in Manager > Oculusを選択し、設定内容を確認して設定変更の必要があれば変更
    f:id:hyoromo:20200725041435j:plain

もし追加後にXR Plugin Management/Oculus XR Pluginをアップデートしたい場合はPackage Managerから行います。
該当Pluginに「See other versions」ボタンがあれば、他バージョンをインストール可能です。無ければどうしようも無いので諦めます。
f:id:hyoromo:20200725054329j:plain:w600

Oculus Integrationのセットアップ

Oculusが提供しているOculus製品に使えるPluginをセットアップしていきます。

  1. UnityEditorのメニューから、Window > Asset StoreでAsset Storeビューを開く
  2. Oculus Integration で検索してプロジェクトへインポート
    インポート対象は最低限ならVRとOculusProjectConfig.assetだけで良いです
    f:id:hyoromo:20200620200044p:plain
  3. Projectビューから、Oculus > VR > PrefabsにあるOVRCameraRig/OVRPlayerControllerのどちらかを、Hierarchyへ追加する
    OVRCameraRigはMain CameraがVR対応された3人称視点タイプのカメラ
    OVRPlayerControllerはカメラをPlayerとした一人称視点のカメラで、コントローラでの移動と回転にも対応。確認用としては後者を追加するのがオススメです
  4. Hierarchyビューから既存カメラを削除

Oculus Questへデプロイ

ここまでの設定が問題無いかを確認するために、Questへアプリをインストールして起動してみます。なお、以下手順の1-2はOculusQuest本体設定なので1度行えば以降は設定を弄る必要がありません。

  1. スマホアプリのOculusを起動し、デプロイしたいQuestの設定を開く
  2. 設定一覧にある 開発者設定 を選択し、開発モードをONに切り替える
  3. UnityEditorのメニューから、Oculus > OVR Build > OVR Build APK And Run を選択するかCtrl+Kショートカットで実行します
    この方法は通常のBuildSettingsからapkを作成するよりも速いです。
  4. 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ボタンの押下時間が長いと別アクションの向きリセットが行われてしまうためトリガーを引いても撮影出来ません。

QuestからPCへコピー

いくつか方法はあると思いますが、1通りだけ書きます。
f:id:hyoromo:20200725053809j:plain
保存したファイルはAndroidStudioのメニューから「View > Tool Windows> DiveceFileExploer」で起動し、storage/self/primary/Oculus/Screenshots 以下に存在する事が確認出来ます。
コピーしたい対象ファイルを右クリックして Save As... を選ぶと、PCの任意ディレクトリへ保存出来ます。

エラー

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ビューから検索すれば発見出来ます。

*1:インストール時にAndroid SDK&NDK ToolsとOpenJDKをインストールしておくと別途パスを通さずに済んで楽です