Appearance
QDA:QRコードテキスト確認(資料)
スクリプト上での流れ(chatgpt作成のもの)
全体像
BarcodeReader(Androidプラグイン連携部分)- カメラ映像からバーコード(QRコード)を検出
- 検出結果(文字列や座標)をJSONでUnityへ通知
OnReadBarcodesイベントを発火し、読み取った文字列を外部へ渡す
BarcodeTracker(3D座標変換などの補助)BarcodeReaderのOnReadBarcodesを受け取り、読み取った文字列を自分のResult構造体に入れる- バーコードの2D座標→3D座標変換を行い、
OnTrackBarcodesイベントを発火し、変換後の座標や文字列を外部へ渡す
IndicatorDriver(UI要素の管理)BarcodeTrackerのOnTrackBarcodesを受け取り、読み取った文字列をIndicatorに割り当てるIndicatorオブジェクトを複数管理し、必要な数だけ表示/非表示を切り替える
Indicator(実際のUI要素: TextMeshPro など)IndicatorDriverから受け取った文字列を、textMesh(TMP_Text) にセットする- ここで初めてユーザが目にするテキストとして描画される
スクリプト間の文字の受け渡しの流れ
1. BarcodeReader がバーコード結果を受け取る
csharp
private void OnBarcodeResults(string json)
{
Results results = JsonUtility.FromJson<Results>(json);
OnReadBarcodes.Invoke(results.results);
}- Androidプラグイン側から呼ばれるコールバック (
OnBarcodeResults) で、読み取られたバーコードの情報(文字列textなど) がjsonで渡されます。 - JSONを
Result[]に変換し、OnReadBarcodes.Invoke(results.results)で通知します。
2. BarcodeTracker が BarcodeReader.OnReadBarcodes を受け取る
csharp
barcodeReader.OnReadBarcodes += OnReadBarcodes; // Awakeで登録
private void OnReadBarcodes(IEnumerable<BarcodeReader.Result> barcodeResults)
{
results.Clear();
foreach (BarcodeReader.Result barcodeResult in barcodeResults)
{
// 新しいResult構造体に文字列を入れる
Result trackResult = new Result(barcodeResult.text);
// ここで2D→3Dの座標変換 etc...
// 変換後のコーナー座標を trackResult.corners に格納
results.Add(trackResult);
}
// 変換が終わったら OnTrackBarcodes イベントで外部へ渡す
OnTrackBarcodes.Invoke(results);
}OnReadBarcodesが呼び出されると、- バーコードごとに文字列を
trackResult.textにセット - 座標変換をして
trackResult.cornersに格納 - 最後に
OnTrackBarcodes.Invoke(results)で (文字列 + 座標) のリストを渡す
- バーコードごとに文字列を
3. IndicatorDriver が BarcodeTracker.OnTrackBarcodes を受け取る
csharp
barcodeTracker.OnTrackBarcodes += OnTrackBarcodes; // Awakeで登録
private void OnTrackBarcodes(IEnumerable<BarcodeTracker.Result> results)
{
int i = 0;
foreach (BarcodeTracker.Result result in results)
{
if (i >= indicators.Count)
InstantiateIndicator();
indicators[i].gameObject.SetActive(true);
// ここでIndicator.Set(result)を呼ぶ
indicators[i].Set(result);
i++;
}
// 使わないインジケータは非表示
while (i < indicators.Count)
{
indicators[i].gameObject.SetActive(false);
i++;
}
}OnTrackBarcodesの引数results(各バーコード情報) を順に取り出すindicatorPrefabのインスタンス(Indicator)を使ってIndicator.Set(result)を呼び出し- ここが文字列をUI要素に反映する直前の段階です
4. Indicator が文字列を TextMeshPro にセット
csharp
public void Set(BarcodeTracker.Result result) => Set(result.text, result.corners);
public void Set(string text, Vector3[] corners)
{
textMesh.text = text; // ← ここで文字列を画面に反映
// cornersを使って位置や姿勢を調整
Vector3 topCenter = (corners[2] + corners[3]) / 2f;
transform.position = topCenter;
// 角の位置をLineRendererで描画するなどの処理
lineRenderer.SetPositions(offsetPositions);
}Set(BarcodeTracker.Result result)で受け取ったtextをtextMesh.textに代入- この瞬間に、バーコードで読み取られた文字が実際のUI(TMP_Text)に表示される
- 座標情報(
corners)をもとに自身の位置やLineRendererを調整
Unity6でのビルド:
無加工で表示ができています。

Unity2022でのビルド:
表示部分の問題で表示できていないです。

ただ、データとしては読み込めているようで
Barcode TrackerのOnReadBarcodesの部分でテキストを確認したところ無事に読み取れていることが確認できています。表示には、動作状態を表していたText (Legacy)を利用しています。


Author: 水上 | Source:
水上\QDA:QRコードテキスト確認(資料) b13e3d0de2f0426eaab432a5b44e200d.md