見出し画像

Magic Leap2 にインストール済みのフィッティングやアイキャリブレーションのアプリをインテントを使って呼び出す方法

はじめに

この記事は、Magic Leap2 Advent Calendar 2022 の6日目です。
Unityで開発したMagic Leap2 アプリケーションからインストール済みのフィッティングやアイキャリブレーションのアプリケーションをインテントを使って呼び出す方法について説明します。


OnePlanet XR について

https://1planet.co.jp/xrconsulting.html

このブログ記事は 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

以下のインテントは当デモでは実施していません。
com.magicleap.intent.action.SELECT_SPACE
ローカライズするスペースを選択するためにマッピングツールを開きます。startActivityForResultで開始する必要があり、com.magicleap.intent.extra.SPACE_ID(ローカライズしたい空間のID)とcom.magicleap.intent.extra.MAPPING_MODE(OnDeviceは0、ARCloudは1)を追加で指定する必要があります。


OnePlanet XR

https://1planet.co.jp/xrconsulting.html

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技術全般をブログマガジンを連載しています。