HoloLens2でQRコードを読み込む方法

導入

NuGetForUnityをインポート

https://github.com/GlitchEnzo/NuGetForUnity

ReleaseからUnityPackageをダウンロード→インポート

MixedReality.QRをインストール

Unity上部のメニューから NuGet > Manage NuGet Package > Microsoft.MixedReality.QRで検索、インストール

WebCamを許可

Player Settings > Publishing Settings > Capabilities > WebCamにチェック

サンプル

下のスクリプトをゲームオブジェクトにアタッチしインスペクターからTextをセット

QRCodeReader.cs
QRCodeReader.cs
using UnityEngine;
using Microsoft.MixedReality.QR;
using UnityEngine.UI;
 
public class QRCodeReader : MonoBehaviour
{
    [SerializeField] Text text = default;
    QRCodeWatcher qrCodeWatcher;

    private async void Start()
    {
        Debug.Log(QRCodeWatcher.IsSupported());
        text.text = QRCodeWatcher.IsSupported().ToString();
        if (QRCodeWatcher.IsSupported()) //サポートされているか確かめる。
        {
            await QRCodeWatcher.RequestAccessAsync();  //アクセス許可を取る。
            qrCodeWatcher = new QRCodeWatcher();
            qrCodeWatcher.Updated += UpdatedQRCode; //QRCodeを発見した時の処理を追加。
            qrCodeWatcher.Start(); //スキャンを開始。
        }
    }

    // QRCodeを発見した時の処理。
    private void UpdatedQRCode(object sender, QRCodeUpdatedEventArgs e) 
    {
        text.text = e.Code.Data;
    }
 
    // スキャンを止める。
    public void Stop()
    {
        qrCodeWatcher.Stop(); //スキャンを停止
        qrCodeWatcher.Updated -= UpdatedQRCode; //QRCodeを発見した時の処理を削除
    }
}

注意点

QRCodeWatcherのQRコード検出はドライバーの機能を使用しています。

そのためHoloLens2起動時からQRCodeWatcher.Startを呼び出すまでに検出したQRコードもメモリに保持しています。※メモリのクリアはサポートされていません。

QRCodeWatcher.Start時にそれまでに検出したQRコードに対してAddedイベントが発生するので呼び出し時点ではカメラに写っていないQRコードに対しても処理を行なうので注意が必要です。

StartからStopの間に検出したQRコードに対して処理を行ないたい時は時間によってフィルタリングをかける、Updatedを使用するなどの工夫が必要です。

参考文献

コメントを残す

メールアドレスが公開されることはありません。