Meta QuestのQRコード認識
Meta Quest SDK v78から、QRコードの検出と追跡機能が利用可能になりました。
従来は開発者自身でカメラ画像を解析してQRコードを検出する必要がありましたが、公式SDKに実装されたことで、より簡単にQRコードの検出が可能になりました。
現在は実験的なAPIのため商用アプリケーションでの利用は推奨されませんが、開発環境でQRコードの認識と追跡を試すことができます。
前提条件
QRコードの追跡機能を利用するには、次のような前提条件があります。
- Quest 3/3S以降
- Horizon OS v78以降
- Unity 2022.3.15f1以降
- Meta MR Utility Kit v78以降
また、マイクロQRコードは未サポート、QRコードバージョンは10までといった、いくつかの制限事項があります。
設定方法
1. Meta Questで空間データのアクセス許可を有効にする
アクセス許可はデフォルトで自動的にリクエストされるため、特別な設定は不要です。パーミッションに問題が発生した場合は、以下のドキュメントを参照してください。
参考: 空間データのアクセス許可 | Meta Horizon OS Developers
2. ビルディングブロックを使用してカメラリグとパススルーレイヤーを追加する
パススルーレイヤーを追加すると、カメラリグも自動で追加されます。
3. OVRManagerコンポーネントの設定を変更する
カメラリグにアタッチされているOVRManagerコンポーネントをインスペクタで開き、以下の設定を行います。
- Quest Features > Scene Supportを
Required
に設定 - General > Anchor Supportを
Enable
に設定 - Experimental > Experimental Features Enabledにチェック
4. AndroidManifest.xmlに実験的機能を有効化する設定を追加する
<uses-feature android:name="com.oculus.experimental.enabled" />
5. Meta QuestとPCを接続し、ADBでコマンドを実行する
参考: テスト機能 | Meta Horizon OS Developers
※Meta Questの再起動時に設定がリセットされるため注意が必要です。
6. Meta MR Utility Kit v78以降をインポートし、MRUKコンポーネントを追加する
- シーンに空のGameObjectを追加し、MRUKコンポーネントをアタッチ
- QR Tracking Enabledにチェック
7. トラッキングイベントを処理するコードを実装する
- OnTrackableAddedとOnTrackableRemovedイベントを購読するスクリプトを作成
- OnTrackableAddedでPrefabをインスタンス化し、MRUKTrackableを親に設定
以下のサンプルコードを参考に実装してください。
using Meta.XR.MRUtilityKit;
using UnityEngine;
public class QRCodeManager : MonoBehaviour
{
[SerializeField] MRUK mruk;
[SerializeField] GameObject trackablePrefab;
private void Start()
{
mruk.SceneSettings.TrackableAdded.AddListener(OnTrackableAdded);
mruk.SceneSettings.TrackableRemoved.AddListener(OnTrackableRemoved);
}
private void OnDestroy()
{
mruk.SceneSettings.TrackableAdded.RemoveListener(OnTrackableAdded);
mruk.SceneSettings.TrackableRemoved.RemoveListener(OnTrackableRemoved);
}
private void OnTrackableAdded(MRUKTrackable trackable)
{
if (trackable != null &&
trackable.TrackableType == OVRAnchor.TrackableType.QRCode &&
trackable.MarkerPayloadString != null)
{
Debug.Log("QR Code Added: " + trackable.MarkerPayloadString);
Instantiate(trackablePrefab, trackable.transform);
}
}
private void OnTrackableRemoved(MRUKTrackable trackable)
{
if (trackable != null &&
trackable.TrackableType == OVRAnchor.TrackableType.QRCode &&
trackable.MarkerPayloadString != null)
{
Debug.Log("QR Code Removed: " + trackable.MarkerPayloadString);
}
}
}
以上で設定は完了です。ビルドして実行すると、QRコードの検出が開始されます。QRコードを検出するとOnTrackableAddedイベントが発火し、QRコードの位置にPrefabがインスタンス化されます。QRコードを動かすと、若干の遅延を伴いながらPrefabが追従します。
QRコード検出は処理負荷が高いため、不要な場面では無効化することを推奨します。
まとめ
Meta Quest SDK v78で追加されたQRコード追跡機能により、VR空間内でQRコードを活用した新しい体験の実装が可能になりました。現在は実験的機能のため制限はありますが、位置情報の共有、AR表示のトリガー、インタラクティブなコンテンツの配置など、様々な応用が期待できます。今後の正式リリースに向けて、開発環境で試験的に実装してみることで、QRコードを活用したMRアプリケーションの可能性を探ることができるでしょう。