本日はMetaQuest3の技術調査枠です。
MRTKv2.xとQuestDisplayAccessDemoを使ってQuest3でQRコードトラッキングを行う手順を記事にします。
前提条件
本記事では以下の記事で作成したUnityプロジェクトを基に設定を行います。
bluebirdofoz.hatenablog.com
QuestDisplayAccessDemo
QuestDisplayAccessDemoははtrev3dという個人の方が公開しているMetaQuestでカメラアクセスを行うデモプロジェクトです。
キャプチャ結果と深度推定を用いたQRコードの読み取りとトラッキング機能も実装されています。
詳細は以下の記事を参照ください。
bluebirdofoz.hatenablog.com
2024/11/08現在masterブランチのコードはUnity 2022環境で利用するとビルド時にエラーが発生します。
今回はまた別の有志の方が作成している以下のUnity 2020対応ブランチを利用しました。
github.com
上記のGitHubプロジェクトをクローンして取得するか、Zipファイルでプロジェクトをダウンロードします。
今回は[Download ZIP]からzipファイルをダウンロードしました。
ダウンロードしたQuestDisplayAccessDemo-pr-unity-2022-compatibility.zipを任意のフォルダに展開しておきます。
ライブラリのインポート
Unityプロジェクトを開き、QuestDisplayAccessDemoプロジェクトの以下のフォルダをドラッグコピーしてインポートします。
・Assets/DepthKit
・Assets/DisplayCapture
インポートを行うと以下のエラーが発生します。
error CS0227: Unsafe code may only appear if compiling with /unsafe. Enable "Allow 'unsafe' code" in Player Settings to fix this error.
本エラーはコード内で「unsafe sbyte*」型を利用しているため、メモリリークの危険性がある旨のエラーメッセージです。
今回はUnsafeコードを許容するプロジェクト設定を行ってエラーを許容して回避します。
メニューから[Edit -> Project Settings..]を開き、[Player]タブの[Other Settings]パネルを開きます。
[Script Compilation -> Allow 'unsafe' Code]のチェックを入れると対象のコードが許容されてエラーが表示されなくなります。
プロジェクト設定
[Project Settings]ダイアログからプロジェクトの各種設定を行います。
Android APIのバージョン
Android APIのバージョンの設定を行います。
[Player]タブの[Other Settings]パネルを開き、以下の2項目を[Android 12.0 (12L, API level 32)]に設定します。
・Minimum API Level
・Target API Level
マニフェストファイルとグレイドルファイル
マニフェストファイルとグレイドルファイルの設定を行います。
[Player]タブの[Publishing Settings]パネルを開き、以下の2項目のチェックを入れます。
・Custom Main Manifest
・Custom Main Gradle Template
Androidの権限設定を行うためのマニフェストファイルの設定を行います。
以下のフォルダにマニフェストファイルが生成されています。
Assets/Plugins/Android/AndroidManifest.xml
マニフェストファイルに以下の2つのコードを追加して権限の設定を行います。
<!--ADD THESE LINES TO YOUR MANIFEST <APPLICATION> SECTION!!!--> <activity android:name="com.trev3d.DisplayCapture.DisplayCaptureRequestActivity" android:exported="false" /> <service android:name="com.trev3d.DisplayCapture.DisplayCaptureNotificationService" android:exported="false" android:foregroundServiceType="mediaProjection" /> <!--ADD THESE LINES TO YOUR MANIFEST <APPLICATION> SECTION!!!-->
<!--ADD THESE LINES TO YOUR MANIFEST <MANIFEST> SECTION!!!--> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" /> <!--ADD THESE LINES TO YOUR MANIFEST <MANIFEST> SECTION!!!-->
javaのビルド設定を行うためのグレイドルファイルの設定を行います。
以下のフォルダにグレイドルファイルが生成されています。
Assets/Plugins/Android/mainTemplate.gradle
グレイドルファイルに以下の2つのコードを追加して依存関係の設定を行います。
configurations.all { resolutionStrategy { eachDependency { DependencyResolveDetails details -> if (details.requested.group == 'androidx.appcompat') { details.useVersion "1.5.1" } if (details.requested.group == 'androidx.core') { details.useVersion "1.8.0" } if (details.requested.group == 'androidx.activity') { details.useVersion "1.5.1" } if (details.requested.name == 'annotation-experimental') { details.useVersion "1.2.0" } } } }
/* ADD THESE LINES TO YOUR GRADLE DEPENDENCIES SECTION */ implementation('androidx.appcompat:appcompat:1.5.1') { force = true } implementation('androidx.appcompat:appcompat-resources:1.5.1') { force = true } implementation('androidx.core:core:1.8.0') { force = true } implementation('androidx.core:core-ktx:1.8.0') { force = true } implementation('androidx.activity:activity:1.5.1') { force = true } implementation('androidx.annotation:annotation-experimental:1.2.0') { force = true } implementation 'com.google.mlkit:barcode-scanning:17.3.0' implementation 'com.google.code.gson:gson:2.11.0' /* ADD THESE LINES TO YOUR GRADLE DEPENDENCIES SECTION */
これでQuestDisplayAccessDemoのインポートとプロジェクト設定は完了です。
以下のデモシーンを読み込んでビルドを行うことで動作確認用のアプリパッケージを作成できます。
次回はMRTKで組んだシーンにQRコードトラッキングの機能を組み込みます。
bluebirdofoz.hatenablog.com