Magic Leap2 の ヘッドトラッキング状態取得について
はじめに
Magic Leap2 ヘッドトラッキング の状態取得について説明します。
Magic Leap2 のヘッドトラッキングが正常に動作していない状態や復帰したタイミングなど、アプリケーションで検知することができます。
OnePlanet XR について
このブログ記事は OnePlanet XR によるものです。
OnePlanet XR は、AR/MR/VPS技術に専門特化したコンサルティングサービスです。豊富な実績を元に、AR/MR技術を活用した新たな事業の立ち上げ支援や、社内業務のデジタル化/DX推進など、貴社の必要とするイノベーションを実現いたします。
ご相談から受け付けております。ご興味ございましたらお問い合わせください。
Magic Leap2 の ヘッドトラッキング状態取得について
Magic Leap2 の ヘッドトラキングの状態やロスト、復帰などの状態変化を検知して情報を表示するデモアプリケーションを作成します。
ヘッドトラッキングの状態
Magic Leap2 のヘッドトラッキングの状態は以下になります。
// 6Dofフルトラッキング(位置と回転)
InputSubsystem.Extensions.MLHeadTracking.TrackingMode.Mode6DOF
// ヘッドトラッキングが機能してない状態。
InputSubsystem.Extensions.MLHeadTracking.TrackingMode.ModeUnavailable
ヘッドトラッキングの変化
ローカライズできない状態や復帰した状態切り替えによるイベント。
// ロスト状態(復帰の可能性あり。)
InputSubsystem.Extensions.MLHeadTracking.MapEvents.Lost
// ロストから復帰
InputSubsystem.Extensions.MLHeadTracking.MapEvents.Recovered
// ロストからの復帰失敗
InputSubsystem.Extensions.MLHeadTracking.MapEvents.RecoveryFailed
// 新しいセッションの作成
InputSubsystem.Extensions.MLHeadTracking.MapEvents.NewSession
開発環境 / 動作環境
Unity Editor 2022.2.0b8.3023
Magic Leap SDK 1.1.0-dev2
Magic Leap Unity 1.2.0
Magic Leap XR Plugin 7.0.0.pre.1
Magic Lea 2 OS 1.1.0-dev2 (B3E.221117.04-R.028)
ヒエラルキー
Handling Tracking Loss Example
シーンを新規作成します。Main Cameraは削除し、XR Rigのプレファブをヒエラルキーに配置します。
Game Objectを作成し、名前を Handling Tracking Loss Example にします。
HandlingTrackingLossExample
Handling Tracking Loss Example の Game Object にアタッチするHandlingTrackingLossExampleというスクリプトを作成します。
スクリプトは以下になります。
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.XR;
using UnityEngine.XR.MagicLeap;
using TMPro;
public class HandlingTrackingLossExample : MonoBehaviour
{
private InputDevice _headsetDevice;
[SerializeField]
private TextMeshProUGUI infoState;
[SerializeField]
private TextMeshProUGUI infoMapEvent;
void Update()
{
if (!_headsetDevice.isValid)
{
_headsetDevice = InputSubsystem.Utils.FindMagicLeapDevice(
InputDeviceCharacteristics.HeadMounted | InputDeviceCharacteristics.TrackedDevice);
return;
}
HeadTrackingState();
HeadTrackingEvents();
}
private void HeadTrackingState()
{
if (InputSubsystem.Extensions.MLHeadTracking.TryGetState(
_headsetDevice, out InputSubsystem.Extensions.MLHeadTracking.State state))
{
switch(state.Mode)
{
case InputSubsystem.Extensions.MLHeadTracking.TrackingMode.Mode6DOF:
infoState.text = "State:6DoF";
break;
case InputSubsystem.Extensions.MLHeadTracking.TrackingMode.ModeUnavailable:
infoState.text = "State:Unavailable";
break;
}
}
}
private void HeadTrackingEvents()
{
if (InputSubsystem.Extensions.MLHeadTracking.TryGetMapEvents(
_headsetDevice, out InputSubsystem.Extensions.MLHeadTracking.MapEvents mapEvents))
{
switch(mapEvents)
{
case InputSubsystem.Extensions.MLHeadTracking.MapEvents.Lost:
infoMapEvent.text = "MapEvent:Lost";
break;
case InputSubsystem.Extensions.MLHeadTracking.MapEvents.Recovered:
infoMapEvent.text = "MapEvent:Recovered";
break;
case InputSubsystem.Extensions.MLHeadTracking.MapEvents.RecoveryFailed:
infoMapEvent.text = "MapEvent:RecoveryFailed";
break;
case InputSubsystem.Extensions.MLHeadTracking.MapEvents.NewSession:
infoMapEvent.text = "MapEvent:NewSession";
break;
}
}
}
}
実行
明かりが暗いところでMagic Leap2 を起動すると状態はUnavailable。明かりを点けるとUnavailableから6DoFに変わり、Recoveredのイベントが発行されます。
OnePlanet XR
AR/MR/VPS技術に専門特化したコンサルティングサービス
Magic Leap2 を使ったソリューションのご検討の方からのお問い合わせ、お待ちしております。
お問い合わせ先
https://1planet.co.jp/xrconsulting.html#op_form
OnePlanet Tech Magazine
Magic Leap1 、Magic Leap2、スマホAR(Niantic Lightship ARDK、WebAR、VPSなど)といったAR技術全般をブログマガジンを連載しています。