制御 Mega トラッキングプロセス
このドキュメントでは、さまざまなアプリケーションシナリオの要件を満たすために、Mega トラッキングプロセス中の機能とパラメータを制御する方法について説明します。
開始前に
- 私のローカリゼーションライブラリは使用可能ですか? を確認してください。
デバイスサポートレベルの調整
MegaTrackerFrameFilter の MegaTrackerFrameFilter.MinInputFrameLevel プロパティは、Mega がサポートする最小デバイスレベルを指定するために使用されます。
![]()
Mega はほとんどすべてのタイプのフレームデータソースで実行できますが、異なるフレームデータソースはトラッキング効果に異なる影響を与えます。
デフォルトでは、Mega はデバイスがサポートする最高レベルのフレームデータソースを選択してトラッキングを行います。デフォルト構成のMega対応session は、6DoF と 5DoF のフレームデータソースをサポートするように既に構成されています。
Mega の実行時に特定レベルのフレームデータソースをサポートするには、次の2つの条件を満たす必要があります:
- 必要なフレームデータソースが session の利用可能なフレームデータソースグループに含まれていること
- MegaTrackerFrameFilter.MinInputFrameLevel が必要なフレームデータソースの CameraTransformType レベル以上であること
例えば、デフォルト session で 3DoF トラッキングをサポートするには:
- session のフレームデータソースグループに ThreeDofCameraDeviceFrameSource を追加する
- MegaTrackerFrameFilter.MinInputFrameLevel を ThreeDof に変更する
別の例として、デフォルト session から 5DoF トラッキングサポートを削除するには:
- session のフレームデータソースグループから InertialCameraDeviceFrameSource を削除する
- MegaTrackerFrameFilter.MinInputFrameLevel を SixDof に変更する(変更しなくても、5DoF フレームデータソースがないため使用されない)
条件を満たすフレームデータソースが利用できない場合、session のアセンブリは失敗します。
トラッキングターゲット管理
Mega を使用する場合、MegaTrackerFrameFilter が使用する target すなわち block を指定する必要があります。
block ソース制御
ほとんどの場合、デフォルト構成を維持することをお勧めします。つまり、エディタで Mega Studio を使用して block をインポートします。
session 配下の Mega Tracker オブジェクトを選択し、Block Root Source オプションは External(デフォルト)のままにします。
![]()
同時に、Block Root をシーン内の MegaBlocks オブジェクトに指定する必要があります。
![]()
Block Root Source オプションを変更すると、他の block ソース方法を指定できます。例えば、ema を使用してデータをインポートする場合、通常は Internal または Mixed オプションを選択します。
スクリプトでは、BlockHolder.BlockRootSource を変更することで同じ効果を得られます。
マルチターゲットトラッキング制御
ほとんどの Mega 使用シナリオでは、マルチターゲットを使用する必要はありません。複数の block が互いに影響を与えないようにする方法を習得するまでは、1つのローカリゼーションライブラリに1つの block のみを配置することをお勧めします。
ヒント
原理上、Mega はデバイス位置をすべての block で計算し、ローカリゼーションライブラリからデバイスが認識した block を選択するわけではありません。考慮不足の使用は、データの混同などによりパフォーマンスの低下を招く可能性があります。
session 配下の Mega Tracker オブジェクトを選択し、Multi Block オプションを変更することでマルチターゲットトラッキング機能を有効または無効にできます。
![]()
スクリプトでは、BlockHolder.MultiBlock を変更することで同じ効果を得られます。
警告
通常、1つのローカリゼーションライブラリには同時に1つの block のみが存在できます。
マルチターゲット構成を変更するとトラッキング効果に影響を与えるため、一般的には変更しないでください。EasyAR 技術サポートの指導のもとで使用してください。
アプリケーション実行中にこの構成が変更された場合、EasyAR に問題を報告する際には必ずこの点を説明してください。
現在のシステム状態の理解
デフォルト session 構成では、UI メッセージ が画面上に表示され、Mega トラッキング状態の情報が含まれます。
ローカリゼーションが成功すると、Mega Block には Found ステータステキストと現在トラッキング中の block 名および ID が表示されます:
![]()
ローカリゼーションが失敗すると、Mega Block には NotFound ステータステキストが表示されます:
![]()
ヒント
NotFound は正常な状態であり、Mega の動作中に頻繁に発生します。この状態でもトラッキングは継続されます。通常、アプリケーション開発で NotFound 状態を特別に処理する必要はありません。
MegaTrackerFrameFilter.LocalizationRespond イベントを使用すると、現在のローカリゼーション状態を取得でき、システムが現在トラッキングターゲットを見つけているかどうかを確認できます。
以下のコードは、このイベントの使用方法と、アプリケーションが注意すべき一般的な異常状態の処理方法を示しています:
private void Awake()
{
megaTracker.LocalizationRespond += HandleLocalizationStatusChange;
}
private void HandleLocalizationStatusChange(MegaLocalizationResponse response)
{
var status = response.Status;
wakingUpCount = status == MegaTrackerLocalizationStatus.WakingUp ? wakingUpCount + 1 : 0;
if (wakingUpCount >= 5)
{
// サービスが起動中です。エンドユーザーに待機してもらう必要があります
}
if (status == MegaTrackerLocalizationStatus.QpsLimitExceeded)
{
// QPS 制限超過。ランダムにエンドユーザーのローカリゼーションが失敗します(全体的なトラッキング品質の低下)
// 現在のユーザー数でトラッキング品質を維持するには、通常、QPS 上限を上げるための課金が必要です
}
if (status == MegaTrackerLocalizationStatus.ApiTokenExpired)
{
// Token の有効期限切れ。Token インターフェースを使用してサービスにアクセスする場合にのみ発生します
// この問題に対処するには、アプリケーションが独自のバックエンドに Token を要求し、MegaTrackerFrameFilter.UpdateToken を呼び出して更新する必要があります
}
}
アプリケーションが頻繁に MegaTrackerLocalizationStatus.RequestTimeout 状態に遭遇する場合、通常はデバイスからサービスへのネットワーク接続状態が悪いことを示しています。トラッキング品質を向上させるには、ネットワーク環境の最適化をお勧めします。ネットワーク状態が改善できないシナリオでは、リクエストタイムアウト時間を増やすことを検討してください。
注記
このイベントからローカリゼーションで返された pose を取得することはできません。
実際、アプリケーション開発でローカリゼーションから返された pose は必要ありません。EasyAR はローカリゼーション後にローカルアルゴリズムを使用してより正確な pose を計算し、開発者が使用できるように返します。この pose は block の transform に既に反映されており、session の実行結果の取得 を参照してください。
一時停止と再開
Mega のトラッキングとローカリゼーション機能は、個別に一時停止および再開できます。
トラッキングの一時停止
MegaTrackerFrameFilter.enabled を false に設定すると、トラッキングを一時停止できます。
デフォルトでは、トラッキングが一時停止されると、すべての block ノード配下のコンテンツが非表示になります。
ローカリゼーションの一時停止
MegaTrackerFrameFilter.EnableLocalization を false に設定すると、ローカリゼーションを一時停止できます。
警告
ローカリゼーションを一時停止するとトラッキング効果に影響を与えるため、一般的には変更しないでください。EasyAR 技術サポートの指導のもとで使用してください。
アプリケーション実行中にローカリゼーションが一時停止された場合、EasyAR に問題を報告する際には必ずこの点を説明してください。
サービスとリクエスト制御
MegaTrackerFrameFilter コンポーネントのパラメータを変更することで、サービスへのリクエスト動作を制御できます。
リクエスト間隔とタイムアウト
session 配下の Mega Tracker オブジェクトを選択し、Request Time Parameters のオプションを変更すると、サービスへのリクエスト間隔とタイムアウト時間を調整できます。
![]()
スクリプトでは、MegaTrackerFrameFilter.RequestTimeParameters を変更することで同じ効果を得られます。
警告
リクエスト間隔を変更するとトラッキング効果に影響を与えるため、一般的には変更しないでください。EasyAR 技術サポートの指導のもとで使用してください。
アプリケーション実行中にリクエスト間隔が変更された場合、EasyAR に問題を報告する際には必ずこの点を説明してください。
ローカリゼーションライブラリの切り替え
MegaTrackerFrameFilter.SwitchEndPoint(ExplicitAddressAccessData, BlockRootController) を使用すると、実行時にローカリゼーションライブラリを切り替えることができます。このインターフェースを使用する場合、カメラ映像と session は中断されません。
関連トピック
- Mega 向け AR Session ベストプラクティス Mega に適した AR Session の作成と構成方法について説明します
- Mega トラッキングターゲットの追加 Mega のトラッキングターゲット block の追加方法と、Unity エディタで block モデルをロードして開発を支援する方法について説明します
- フレームデータソースグループの追加 session のフレームデータソースグループを変更する方法について説明します
- session の実行結果の取得 session コンポーネントのトラッキング結果を取得する方法について説明します
- UI メッセージ session 状態を表示するための UI メッセージの使用方法について説明します