Mega Go のトラッキング処理を制御する
この記事では、さまざまなアプリケーションシナリオの要件を満たすために、Mega Go のトラッキング処理における各機能とパラメータを制御する方法を説明します。
始める前に
- ローカライゼーション機能は使用可能か? を確認して、正しい地図がダウンロードされていることを確かめてください。
tracker のワークフロー
tracker のワークフローは次のとおりです。
flowchart LR
subgraph startup_graph[起動]
direction TB
sstart((session 起動))
create[ネイティブ作成]
load(target をロード)
verify[試用検証]
init_g[[初期化]]
end
subgraph init_graph[初期化]
direction TB
init_{6DoF 初期化成功<br>または非 6DoF}
init[[ローカルトラッキング初期化プロセス]]
detecting[[検出]]
tracking_g[[トラッキング]]
end
subgraph tracking_graph[トラッキング]
direction TB
tracking[[継続トラッキング]]
end
subgraph stopping_graph[停止]
direction TB
unload(target をアンロード)
dispose[ネイティブ破棄]
sstop([session 停止])
end
sstart --> create --> load --> verify --> init_g
init --> init_ --> |Yes| detecting --> tracking_g
unload --> dispose --> sstop
init_ --> |No| init
startup_graph --> init_graph
init_graph --> tracking_graph
tracking_graph --> stopping_graph
処理はおおまかにいくつかの段階に分かれます。
- 起動:
- session の起動後、ネイティブ層の tracker が作成されます。
- target の Start() の後、その target が対応する tracker に読み込まれます。
- 試用データの場合は、オンラインで試用資格を検証する必要があり、検証に成功してから次の段階に進みます。
- 初期化:
- 6DoF frame source を使う場合、ローカル tracking の初期化処理に入ります。
- ローカル tracking の初期化には時間がかかることがあり、シーンの複雑さやデバイス性能に関係し、通常は frame source の下位層で使われるアルゴリズムにも関係します。
- 6DoF ではない frame source を使う場合、ローカル tracking 初期化段階はスキップされ、直接検出が始まります。
- 検出処理にも時間がかかることがあり、シーンの位置特定のしやすさやデータ取得・マッピング品質に左右されます。
- 既定の設定では、この段階の内容は表示されません。これは ActiveController コンポーネントのオプションで制御できます。
- 6DoF frame source を使う場合、ローカル tracking の初期化処理に入ります。
- トラッキング:
- tracker は現在の block を継続的に追跡します。
- 既定の設定では、tracking 状態(TargetController.IsTracked ==
true)の target ノード配下の内容のみが表示されます。これは ActiveController コンポーネントのオプションで制御できます。
- 停止:
- session 停止後、target はアンロードされ、ネイティブ層の tracker は破棄されます。
デバイスサポートレベルを調整する
MegaGoTrackerFrameFilter の MegaGoTrackerFrameFilter.MinInputFrameLevel プロパティは、Mega がサポートする最低デバイスレベルを指定するために使います。
![]()
Mega Go はほぼすべての種類の frame source で動作できますが、frame source ごとに tracking 結果への影響は異なります。
既定では、Mega はデバイスがサポートする最も高いレベルの frame source を tracking に使います。既定設定で Mega Go に対応した session には、6DoF と 5DoF に対応した frame source がすでに構成されています。
実行時に特定レベルの frame source を Mega にサポートさせるには、2 つの条件を満たす必要があります。
- 必要な frame source が session の利用可能な frame source グループに含まれていること。
- MegaGoTrackerFrameFilter.MinInputFrameLevel が、必要な frame source の CameraTransformType レベル以上であること。
たとえば、既定の session で 3DoF tracking をサポートするには、次が必要です。
- ThreeDofCameraDeviceFrameSource を session の frame source グループに追加する。
- MegaGoTrackerFrameFilter.MinInputFrameLevel を ThreeDof に変更する。
別の例として、既定の session から 5DoF tracking のサポートを外すには、次が必要です。
- InertialCameraDeviceFrameSource を session の frame source グループから削除する。
- MegaGoTrackerFrameFilter.MinInputFrameLevel を SixDof に変更する(変更しなくても、5DoF frame source がないため 5DoF は使われません)。
条件を満たす frame source が利用できない場合、session の assemble は失敗します。
現在のシステム状態を把握する
既定の session 構成では、UI メッセージ が画面に表示され、Mega Go の状態情報が含まれます。
tracker の状態は Mega Go: の横に表示されます。たとえば Tracking や VerifyingTrial です。検出と tracking の間は、下に localization の更新も表示されます。
![]()
現在読み込まれている block の tracking 状態は Mega Go: の下に、Block (<trackingStatus>): <name> (<id>) の形式で表示されます。<name> は block 名、<id> は block ID です。trackingStatus は Tracking または NotTracking で、それぞれ現在の block が追跡中かどうかを示します。

MegaGoTrackerFrameFilter.Status プロパティを使うと現在の状態を取得でき、tracker の動作状況を把握できます。エラー状態が発生した場合は、MegaGoTrackerFrameFilter.Error でエラー状態を取得し、適切に処理できます。
次のコードは、これらのプロパティの使い方と、アプリケーションが注意すべき一般的な異常状態の処理方法を示しています。
void HandleTrackerStatus()
{
if (tracker.Status == MegaGoTrackerStatus.Error)
{
if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
{
// ローカル検証に失敗しました。data の期限切れまたは無効化を確認することを推奨します(テスト版から正式版へ切り替えた後、テスト版データは無効になります)。
}
else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
{
// ローカル検証に失敗しました。target ファイルが完全か確認することを推奨します。
}
else
{
// その他のエラー。
}
}
else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
{
// 試用 target を検証中です。長時間検証が完了しない場合は、ネットワーク接続の確認を推奨します。
}
else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
{
// VIO 入力を初期化中です。長時間初期化が完了しない場合は、使用方法を最適化するようユーザーに案内することを推奨します。
// 例:「カメラを斜め前方に向け、デバイスを持ったまま体を左右に大きく 5 回動かしてみてください。」
}
}
localization の更新を取得するには MegaGoTrackerFrameFilter.LocalizationRespond イベントを使います。
一時停止と再開
tracking を一時停止するには MegaGoTrackerFrameFilter.enabled を false に設定します。
既定では、tracking を一時停止すると、すべての block ノード配下の内容は非表示になります。
関連トピック
- Mega Go 向け AR Session のベストプラクティス では、Mega Go に適した AR Session の作成と設定方法を紹介します
- Mega Go の tracking target を追加する では、Mega Go の tracking target block の追加方法と、開発支援のために Unity Editor で block モデルを読み込む方法を紹介します
- frame source グループを追加する では、session の frame source グループの変更方法を紹介します
- session の実行結果を取得する では、session コンポーネントの tracking 結果の取得方法を紹介します
- UI メッセージ では、session の状態を表示するための UI メッセージの使い方を紹介します