導入
https://github.com/GlitchEnzo/NuGetForUnity
ReleaseからUnityPackageをダウンロード→インポート
Unity上部のメニューから NuGet > Manage NuGet Package > Microsoft.MixedReality.QRで検索、インストール
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を使用するなどの工夫が必要です。