メガゴー追跡プロセスの制御
この文書では、様々なアプリケーションシナリオのニーズを満たすために、メガゴー追跡プロセスの各機能とパラメータを制御する方法について説明します。
開始前
- 私の位置特定機能は使用できますか? を確認し、正しい地図がダウンロードされていることを確認してください。
tracker のワークフロー
tracker のワークフローは以下の通りです。
flowchart LR
subgraph startup_graph[起動]
direction TB
sstart((セッション起動))
create[ネイティブ作成]
load(ターゲットの読み込み)
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(ターゲットのアンロード)
dispose[ネイティブ破棄]
sstop([セッション停止])
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
プロセスは大まかにいくつかの段階に分けられます。
- 起動:
- セッションが起動した後、ネイティブ層の tracker が作成されます。
- ターゲット自身の Start() の後、対応する tracker に読み込まれます。
- 試用データの場合、試用資格のオンライン検証が必要で、検証に成功した後にのみ後続の段階に進みます。
- 初期化:
- 6DoF フレームソースを使用する場合、ローカル追跡初期化プロセスに入ります。
- ローカル追跡初期化には多少時間がかかる場合があり、シーンの複雑さとデバイスの性能に関係し、通常はフレームソースの底層で使用されるアルゴリズムに関係します。
- 非 6DoF フレームソースを使用する場合、ローカル追跡初期化段階はスキップされ、直接検出が開始されます。
- 検出プロセスには多少時間がかかる場合があり、シーンの位置特定のしやすさとデータ収集とマッピングの品質に依存します。
- デフォルトの設定では、この段階の内容は表示されませんが、ActiveController コンポーネントのオプションでこの動作を制御できます。
- 6DoF フレームソースを使用する場合、ローカル追跡初期化プロセスに入ります。
- 追跡:
- tracker は現在のブロックを継続的に追跡します。
- デフォルトの設定では、この段階では追跡状態(TargetController.IsTracked ==
true)のターゲットノードの下の内容のみが表示されますが、ActiveController コンポーネントのオプションでこの動作を制御できます。
- 停止:
- セッションが停止した後、ターゲットがアンロードされ、ネイティブ層の tracker が破棄されます。
デバイスサポートレベルの調整
MegaGoTrackerFrameFilter の MegaGoTrackerFrameFilter.MinInputFrameLevel プロパティは、メガがサポートする最低デバイスレベルを指定するために使用されます。
![]()
メガゴーはほぼすべてのタイプのフレームデータソースで実行できますが、異なるフレームデータソースは追跡結果に異なる影響を与えます。
デフォルトでは、メガはデバイスがサポートする最高レベルのフレームデータソースを選択して追跡します。デフォルト設定でのメガゴーをサポートするセッション は、6DoF と 5DoF のフレームデータソースをサポートするように設定されています。
メガが実行中にあるレベルのフレームデータソースをサポートするには、2 つの条件を満たす必要があります。
- 必要なフレームデータソースがセッションの選択可能なフレームデータソースグループに含まれていること。
- MegaGoTrackerFrameFilter.MinInputFrameLevel が必要なフレームデータソースの CameraTransformType レベル以上であること。
たとえば、デフォルトのセッションで 3DoF 追跡をサポートするには、以下のことが必要です。
- ThreeDofCameraDeviceFrameSource をセッションのフレームデータソースグループに追加する。
- MegaGoTrackerFrameFilter.MinInputFrameLevel を ThreeDof に変更する。
また、たとえば、デフォルトのセッションから 5DoF 追跡のサポートを削除するには、以下のことが必要です。
- InertialCameraDeviceFrameSource をセッションのフレームデータソースグループから削除する。
- MegaGoTrackerFrameFilter.MinInputFrameLevel を SixDof に変更する(変更しなくても、5DoF フレームデータソースがないため、5DoF は使用されません)。
条件を満たすフレームデータソースが利用できない場合、セッションの組み立てに失敗します。
現在のシステム状態の把握
デフォルトのセッション設定では、UI メッセージ が画面に表示され、その中にはメガゴーの状態情報が含まれています。
Tracker の状態は Mega Go: の横に表示され、たとえば Tracking、VerifyingTrial などが表示されます。検出と追跡の過程では、下部に位置特定の更新情報も表示されます。
![]()
現在読み込まれているブロックの追跡状態は、Mega Go: の下に Block (<trackingStatus>): <name> (<id>) として表示されます。ここで、<name> はブロックの名前、<id> はブロックの ID です。trackingStatus は Tracking または NotTracking のいずれかで、それぞれ現在のブロックが追跡中かどうかを示します。

MegaGoTrackerFrameFilter.Status プロパティを使用すると、現在の状態を取得して追跡器の動作状況を把握できます。エラー状態が発生した場合は、MegaGoTrackerFrameFilter.Error を使用してエラー状態を取得し、適切な処理を行うことができます。
以下のコードは、これらのプロパティの使用方法と、アプリが関心を持つ一般的な異常状態の処理方法を示しています。
void HandleTrackerStatus()
{
if (tracker.Status == MegaGoTrackerStatus.Error)
{
if (tracker.Error == MegaGoTrackerError.ServiceVerificationFailed)
{
// サービス検証に失敗しました。データが期限切れまたは無効になっていないか確認することをおすすめします(テスト版を正式版に変更した後、テスト版のデータは無効になります)。
}
else if (tracker.Error == MegaGoTrackerError.LocalVerificationFailed)
{
// ローカル検証に失敗しました。ターゲットファイルが完全であることを確認することをおすすめします。
}
else
{
// その他のエラー。
}
}
else if (tracker.Status == MegaGoTrackerStatus.VerifyingTrial)
{
// 試用ターゲットの検証中です。検証が長時間完了しない場合は、ネットワーク接続を確認することをおすすめします。
}
else if (tracker.Status == MegaGoTrackerStatus.VIOInitializing)
{
// VIO 入力の初期化中です。初期化が長時間完了しない場合は、ユーザーに使用方法の最適化を促すことをおすすめします。
// たとえば、「カメラを斜め前方に向け、デバイスを持って体を左右に大きく 5 回動かしてみてください。」
}
}
MegaGoTrackerFrameFilter.LocalizationRespond イベントを使用すると、位置特定の更新情報を取得できます。
一時停止と再開
MegaGoTrackerFrameFilter.enabled を false に設定すると、追跡を一時停止できます。
デフォルトでは、追跡が一時停止されると、すべてのブロックノードの下の内容が非表示になります。
関連トピック
- メガゴーに適した AR セッションのベストプラクティス では、メガゴーに適した AR セッションを作成および構成する方法について説明しています。
- メガゴーの追跡ターゲットの追加 では、メガゴーの追跡ターゲットブロックを追加する方法と、Unity エディタでブロックモデルを読み込んで開発を支援する方法について説明しています。
- 一連のフレームデータソースの追加 では、セッションのフレームデータソースグループを変更する方法について説明しています。
- セッションの実行結果の取得 では、セッションコンポーネントの追跡結果を取得する方法について説明しています。
- UI メッセージ では、UI メッセージを使用してセッションの状態を表示する方法について説明しています。