見出し画像

Magic Leap2 の Intent について

はじめに

この記事は、Magic Leap2 Advent Calendar 2022 の5日目です。
Magic Leap2 の Intent について説明します。


OnePlanet XR について

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

このブログ記事は OnePlanet XR によるものです。
OnePlanet XR は、AR/MR/VPS技術に専門特化したコンサルティングサービスです。豊富な実績を元に、AR/MR技術を活用した新たな事業の立ち上げ支援や、社内業務のデジタル化/DX推進など、貴社の必要とするイノベーションを実現いたします。

ご相談から受け付けております。ご興味ございましたらお問い合わせください。


Magic Leap2 の Intent

アプリケーション内で Intent を使用して、外部のアクティビティやサービスを開くことができます。

今回はMagic Leap の API側で用意されている Display SettingVoice InputAR Cloud の呼び出す方法を説明します。


開発環境 / 動作環境

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を作成し、名前を Default Intent Example を作成します。


Default Intent Example

DefaultIntentExample というスクリプトを作成し、コンポーネントとして追加します。

スクリプトは以下になります。

using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.XR.MagicLeap;
using static MagicLeapInputs;
using TMPro;

public class DefaultIntentExample : MonoBehaviour
{
    [SerializeField]
    private TextMeshProUGUI intentInfo;

    private MagicLeapInputs mlInputs;
    private MagicLeapInputs.ControllerActions controllerActions;

    enum MagicLeapIntentType {DisplaySetting, VoiceInput, ARCloud}
    MagicLeapIntentType selectIntent = MagicLeapIntentType.DisplaySetting;

    
    // 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.DisplaySetting:
                selectIntent = MagicLeapIntentType.VoiceInput;
                break;
            case MagicLeapIntentType.VoiceInput:
                selectIntent = MagicLeapIntentType.ARCloud;
                break;
            case MagicLeapIntentType.ARCloud:
                selectIntent = MagicLeapIntentType.DisplaySetting;
                break;
        }
        intentInfo.text = selectIntent.ToString();
    }

    private void HandleOnTrigger(InputAction.CallbackContext obj)
    {
        switch (selectIntent)
        {
            case MagicLeapIntentType.DisplaySetting:
                UnityEngine.XR.MagicLeap.SettingsIntentsLauncher.LaunchSystemDisplaySettings();
                break;
            case MagicLeapIntentType.VoiceInput:
                UnityEngine.XR.MagicLeap.SettingsIntentsLauncher.LaunchSystemVoiceInputSettings();
                break;
            case MagicLeapIntentType.ARCloud:
                UnityEngine.XR.MagicLeap.SettingsIntentsLauncher.LaunchSystemARCloudSettings();
                break;
        }
    }
}

バンパーボタンでDisplay SettingVoice InputAR Cloud の切り替えを行い、トリガーボタンで選択しているIntentの呼び出しを行います。


現在選択しているIntent表示

選択しているIntentのテキスト表示用のUIを作成します。以下の記事に従って構築してください。

上記の記事で作成したText(TMP)を DefaultIntentExample の intentInfoフィールドに設定してください。


実行

選択しているIntentの状態でトリガーボタンを押すと、選択した設定画面が起動します。(VoiceInput の場合は起動元のアプリに戻ることができましたが、Display SettingAR Cloud は一階層深い設定のためか、起動元のアプリに戻ることができませんでした。また、1.1.0-dev1ではAR Cloudを呼び出しても認知の設定に遷移され、AR Cloudの設定に到達できずでした。以前のバージョンではAR Cloudの設定画面は存在しましたが、現在は確認できないです。)


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