Magic Leap2 にインストール済みのフィッティングやアイキャリブレーションのアプリをインテントを使って呼び出す方法
はじめに
この記事は、Magic Leap2 Advent Calendar 2022 の6日目です。
Unityで開発したMagic Leap2 アプリケーションからインストール済みのフィッティングやアイキャリブレーションのアプリケーションをインテントを使って呼び出す方法について説明します。
OnePlanet XR について
このブログ記事は OnePlanet XR によるものです。
OnePlanet XR は、AR/MR/VPS技術に専門特化したコンサルティングサービスです。豊富な実績を元に、AR/MR技術を活用した新たな事業の立ち上げ支援や、社内業務のデジタル化/DX推進など、貴社の必要とするイノベーションを実現いたします。
ご相談から受け付けております。ご興味ございましたらお問い合わせください。
Magic Leap2 の UnityアプリでWeb XR ブラウザを起動する方法とアプリを終了する方法について
バンパーボタンでインテントの種類を変更。トリガーボタンでインテント呼び出しを行ってます。
開発環境 / 動作環境
Unity Editor 2022.2.0b8.3023
Magic Leap SDK 1.1.0-dev1
Magic Leap XR Plugin 7.0.0.pre.1
Magic Leap2 OS 1.1.0-dev1 (B3E.221020.13-R.039_40)
ヒエラルキー
シーンを新規作成します。Main Cameraは削除し、XR Rigのプレファブをヒエラルキーに配置します。
Game Objectを作成し、名前を Implicit Intent Example にします。
ImplicitIntentExample
Implicit Intent Example の Game Object にアタッチする ImplicitIntent Exampleというスクリプトを作成します。
スクリプトは以下になります。
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.XR.MagicLeap;
using static MagicLeapInputs;
using TMPro;
public class ImplicitIntentExample : MonoBehaviour
{
[SerializeField]
private TextMeshProUGUI intentInfo;
private MagicLeapInputs mlInputs;
private MagicLeapInputs.ControllerActions controllerActions;
enum MagicLeapIntentType { FIT_WEAR, EYE_CALIBRATION, MAPPING_TOOL, AR_CLOUD_SETTINGS}
MagicLeapIntentType selectIntent = MagicLeapIntentType.FIT_WEAR;
// Start is called before the first frame update
void Start()
{
mlInputs = new MagicLeapInputs();
mlInputs.Enable();
controllerActions = new MagicLeapInputs.ControllerActions(mlInputs);
controllerActions.Trigger.performed += HandleOnTrigger;
controllerActions.Bumper.performed += HandleOnBumper;
intentInfo.text = selectIntent.ToString();
}
void OnDestroy()
{
controllerActions.Trigger.performed -= HandleOnTrigger;
controllerActions.Bumper.performed -= HandleOnBumper;
mlInputs.Dispose();
}
private void HandleOnBumper(InputAction.CallbackContext obj)
{
switch (selectIntent)
{
case MagicLeapIntentType.FIT_WEAR:
selectIntent = MagicLeapIntentType.EYE_CALIBRATION;
break;
case MagicLeapIntentType.EYE_CALIBRATION:
selectIntent = MagicLeapIntentType.MAPPING_TOOL;
break;
case MagicLeapIntentType.MAPPING_TOOL:
selectIntent = MagicLeapIntentType.AR_CLOUD_SETTINGS;
break;
case MagicLeapIntentType.AR_CLOUD_SETTINGS:
selectIntent = MagicLeapIntentType.FIT_WEAR;
break;
}
intentInfo.text = selectIntent.ToString();
}
private void HandleOnTrigger(InputAction.CallbackContext obj)
{
string intentId = null;
switch(selectIntent)
{
case MagicLeapIntentType.FIT_WEAR:
intentId = "com.magicleap.intent.action.FIT_WEAR";
break;
case MagicLeapIntentType.EYE_CALIBRATION:
intentId = "com.magicleap.intent.action.EYE_CALIBRATION";
break;
case MagicLeapIntentType.MAPPING_TOOL:
intentId = "com.magicleap.intent.action.MAPPING_TOOL";
break;
case MagicLeapIntentType.AR_CLOUD_SETTINGS:
intentId = "com.magicleap.intent.action.AR_CLOUD_SETTINGS";
break;
}
#if UNITY_MAGICLEAP || UNITY_ANDROID
UnityEngine.XR.MagicLeap.SettingsIntentsLauncher.LaunchSystemSettings(intentId);
#endif
}
}
選択中のインテントのテキスト表示
選択中のインテントをテキストで表示するUIを作成します。以下の記事に従って構築してください。
上記の記事で作成したText(TMP)を ImplicitIntentExampleの intentInfoフィールドに設定してください。
実行
このデモでは以下のインテント呼び出しを実施しています。
フィッティング
com.magicleap.intent.action.FIT_WEAR
アイキャリブレーション
com.magicleap.intent.action.EYE_CALIBRATION
マッピングツール
com.magicleap.intent.action.MAPPING_TOOL
ARクラウドの設定
com.magicleap.intent.action.AR_CLOUD_SETTINGS
OnePlanet XR
AR/MR/VPS技術に専門特化したコンサルティングサービス
Magic Leap2 を使ったソリューションのご検討の方からのお問い合わせ、お待ちしております。
お問い合わせ先
https://1planet.co.jp/xrconsulting.html#op_form
OnePlanet Tech Magazine
Magic Leap 1 、Magic Leap2 、スマホAR(Niantic Lightship ARDK、WebAR、VPSなど)といったAR技術全般をブログマガジンを連載しています。