制御 mega 追跡プロセス
この記事では、さまざまなアプリケーションシナリオのニーズを満たすために、Mega追跡プロセスの機能とパラメータを制御する方法について説明します。
開始する前に
- 私のローカライゼーションライブラリは使用可能ですか?を確認してください
デバイスサポートレベルの調整
MegaTrackerFrameFilter の MegaTrackerFrameFilter.MinInputFrameLevel プロパティは、Megaがサポートする最低デバイスレベルを指定するために使用されます。
![]()
Megaはほとんどのタイプのフレームデータソース上で動作しますが、異なるフレームデータソースは追跡効果に異なる影響を与えます。
デフォルトでは、Megaはデバイスがサポートする最高レベルのフレームデータソースを追跡に選択します。Megaをサポートするデフォルト構成のsessionは、6DoFおよび5DoFのフレームデータソースをサポートするように既に構成されています。
Megaの実行時に特定レベルのフレームデータソースをサポートするには、2つの条件を満たす必要があります:
- 必要なフレームデータソースがsessionのオプションのフレームデータソースグループに含まれていること。
- MegaTrackerFrameFilter.MinInputFrameLevel が、必要なフレームデータソースの CameraTransformType レベル以上であること。
例えば、デフォルトのsessionで3DoF追跡をサポートするには:
- ThreeDofCameraDeviceFrameSource をsessionのフレームデータソースグループに追加します。
- MegaTrackerFrameFilter.MinInputFrameLevel を ThreeDof に変更します。
また、デフォルトのsessionから5DoF追跡サポートを削除するには:
- sessionのフレームデータソースグループから InertialCameraDeviceFrameSource を削除します。
- MegaTrackerFrameFilter.MinInputFrameLevel を SixDof に変更します(変更しなくても、5DoFフレームデータソースがないため5DoFは使用されません)。
条件を満たすフレームデータソースが利用できない場合、sessionのアセンブリは失敗します。
追跡ターゲットの管理
Megaを使用する場合、MegaTrackerFrameFilter が使用するターゲット、つまり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つのblockのみを配置することをお勧めします。
ヒント
原理上、Megaはデバイスの位置をすべてのblockで計算し、ローカライゼーションライブラリからデバイスが見ているblockを選択するわけではありません。考慮が不十分な使用は、データの混同などの原因で効果が劣化する可能性があります。
session下の Mega Tracker オブジェクトを選択し、Multi Block オプションを変更することで複数ターゲット追跡機能を有効または無効にできます。
![]()
スクリプトでは、BlockHolder.MultiBlock を変更することで同じ効果を得られます。
警告
一般的に、1つのローカライゼーションライブラリに同時に存在できるblockは1つだけです。
複数ターゲット構成を変更すると追跡効果に影響するため、通常は変更しないことをお勧めします。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メッセージ UIメッセージを使用してsession状態を表示する方法について説明します