yotiky Tech Blog

とあるエンジニアの備忘録

Magic Leap 2 - MRTK3 とOpenXRを使ったプロジェクト環境の構築

目次

開発環境

  • Unity 2022.3.21f1
  • MRTK3
    • Input 3.1
    • UX Components 3.1.1
    • Core Definition 3.1.1
  • MagicLeap2
    • MagicLeap Setup Tool 2.0.7
    • MagicLeap MRTK3 1.0.0-pre6
    • MagicLeap SDK 2.0.0

MagicLeap

手順

  • Magic Leap Hubを開く

    • Package Manager
      • Unity のパッケージをすべてインストール
      • All タブでUnity MRTK3のインストール先フォルダを開いておく
  • 3D(URP) Template でプロジェクトを作成

  • Asset StoreからMagic Leap Setup ToolをMy Assetsに登録してインストール

    • Use OpenXR SDKダイアログ
      • Use OpenXRを選択

  • Magic Leap > Project Setup Toolを開く

    • Magic Leap SDK に最新のSDKのフォルダを設定
    • Apply Allを実行
    • Add Magic Leap Registryダイアログ
      • Use Magic Leap Registryを選択
        • Project Settings > Package Managerに追加される
  • Project Settings > XR Plug-in Management > Project Validation
    • 問題がないことを確認
  • Assets\Settings 配下のURP関連ファイルを全て削除
  • 新たにURP Asset(with Universal Renderer)を作成
    • Quality
      • HDR : チェックを外す
    • Shadows
      • Last Border : 5
  • Project Settings > Graphics

    • Scriptable Render Pipeline Settings に作成したURP Assetを設定
  • Mixed Reality Feature Toolで以下をインストール

    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
  • Project Settings > Package Manager

  • 開いておいたエクスプローラーのパスを確認

    • デフォルトだとここら辺 %userprofile%\MagicLeap\tools\unity\mrtk3\v1.0.0-pre.7
  • Package Manager

    • add package from tarball
      • 上記、com.magicleap.mrtk3-1.0.0-pre.7.tgzを追加する
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
    • XR Handsを1.4以上にアップデート
  • Project Settings > MRTK3
    • ProfileにMRTKProfile-MagicLeap-OpenXRを設定
  • Project Settings > MRTK3 > Magic Leap Settings
    • Permissions で権限を設定
      • EYE_TRACKING
      • HAND_TRACKING
      • etc
    • AndroidManifest.jsonにも追加
<manifest>
    <uses-permission android:name="com.magicleap.permission.EYE_TRACKING" />
    <uses-permission android:name="com.magicleap.permission.HAND_TRACKING" />
</manifest>
  • Project Settings > XR Plug-in Management > OpenXR
    • Depth Submission Mode : None
    • Enabled Interaction Profilesに以下を追加
      • Magic Leap 2 Controller Interaction Profile
      • Eye Gaze Interaction Profile
      • Hand Interaction Profile
    • OpenXR Feature Groupsに以下を追加
      • Magic Leap 2 ... のすべて
      • Hand Tracking Subsystem
    • OpenXR Feature Groupsの中のMagic Leap 2 Rendering Extensionsの設定アイコンを開く
      • Blend Mode : Additive

  • Project Settings > XR Plug-in Management > Project Validation

    • 問題ないか確認
  • 新しくSceneを追加

  • Main Cameraを削除して、MRTK XR Rig - MagicLeap - OpenXRを追加
    • 公式には書かれてないが必要に応じて、Camera Offsetを編集
      • Position Y:0
      • Tracking Origin Mode : Device
      • Camera Y Offset : 0
    • MRTK SpeechのSpeechInteractorを無効化
      • 音声入力使わないしそのままだとエラーが出るので
      • Failed to retrieve a running KeywordRecognitionSubsystem while registering an interactable. Please make sure the subsystem is correctly set up or disable this speech interactor.

  • MRTKInputSimulator を追加
  • Cubeを追加

    • Position Z:1
    • Rotation X:30 Y:30
    • Scale X:0.3 Y:0.3 Z:0.3
    • ObjectManipulator
  • Project Settings > Player

    • Company Name、Product Name、Package Nameを適宜設定

Magic Leap 2 - 既存のMRTK3を使ったプロジェクトでMLSDKからOpenXRに移行する

目次

導入

MagicLeap2のMRTK3でOpenXRに対応したとのこと。

developer-docs.magicleap.cloud

developer-docs.magicleap.cloud

リリースノートに書かれているREADMEは、Magic Leap Hubでダウンロードしたパッケージと同梱されている。上記Webと同等のものと思われるが、執筆時点では、Webでまだ更新されていない項目がREADMEにはあるので注意が必要。

環境

  • MagicLeap Setup Tool 2.0.7

移行前

  • MagicLeap MRTK3 1.0.0-pre6
  • MagicLeap SDK 2.0.0

移行後

  • MagicLeap MRTK3 1.0.0-pre7
  • MagicLeap SDK 2.1.0

手順

  • Package Manager
    • Magic Leap SDKをアップデート
      • Project Setup Tool使うとインポートが終わらない
    • 古いMagic Leap MRTK3を削除して新しいMagic Leap MRTK3を追加
    • XR Handsを1.4以上にアップデート
    • Magic Leap XR Plugin を削除

  • Project Settings > XR Plug-in Management

  • Project Settings > XR Plug-in Management > OpenXR
    • Depth Submission Mode : None
    • Enabled Interaction Profilesに以下を追加
      • Magic Leap 2 Controller Interaction Profile
      • Eye Gaze Interaction Profile
      • Hand Interaction Profile
    • OpenXR Feature Groupsに以下を追加
      • Magic Leap 2 ... のすべて
      • Hand Tracking Subsystem
    • OpenXR Feature Groupsの中のMagic Leap 2 Rendering Extensionsの設定アイコンを開く
      • Blend Mode : Additive

  • Project Settings > MRTK3

    • Profile : MRTKProfile-MagicLeap-OpenXR に置き換える
  • Project Settings > MRTK3 > Magic Leap Settings

    • Settings For XR Provider : Open XR

  • SceneのMRTK XR Rigを置き換える
    • MRTK XR Rig - MagicLeapを削除
    • MRTK XR Rig - MagicLeap - OpenXRを追加

補足

  • MRTK XR RigのMRTK Interaction ManagerでScriptがMissingになってた場合
    • MRTK CoreとInputのバージョンを落としてから再度最新にアップデートしたら治った

Unity - View に interface を使って実装を差し替える

目次

同じプロジェクトの場合

前提

簡単なサンプルとしてHPをゲージと数値で表示する実装を切り替える。

実装

まずはinterfaceを用意する。

    public interface IPlayerStatusViewLogic
    {
        void Initialize();
        void SetHealth(int value);
    }

ゲージの実装

    public class PlayerStatusViewLogic : MonoBehaviour, IPlayerStatusViewLogic
    {
        [SerializeField] private Slider _slider;

        public void Initialize()
        {
            // 何か初期化
        }

        public void SetHealth(int value)
        {
            DOTween.To(
                () => _slider.value,
                x => _slider.value = x,
                (float)value / _state.MaxHp,
                duration: 1.0f);
        }
    }

Hierarchyは以下のように構成してある。

PlayerにはPlayerContainerPlayerStatusViewLogicを追加してある。

public class PlayerContainer : MonoBehaviour
{
    [SerializeField] PlayerController _controller;
    [SerializeField] PlayerViewLogic _playerViewLogic;
    private IPlayerStatusViewLogic _playerStatusViewLogic;

    public void Initialize()
    {
        _playerStatusViewLogic = GetComponent<IPlayerStatusViewLogic>();
        _playerStatusViewLogic.Initialize();
    }
}

PlayerStatusViewLogicをinterfaceで差し替えるため、Inspectorからは設定できない。 Component自体はGameObjectに設定しておき、GetComponent<interface>でScriptから取得するようにする。

数値の実装

    public class PlayerStatusFloatingViewLogic : MonoBehaviour, IPlayerStatusViewLogic
    {
        [SerializeField] private TextMeshPro _hp;

        public void Initialize(){ }

        public void SetHealth(int value)
        {
            DOTween.To(
                () => _state.Hp,
                x => _state.Hp = x,
                value,
                duration: 0.5f)
            .OnUpdate(() => _hp.text = $"{_state.Hp}/{_state.MaxHp}");
        }
    }

Hierarchyは以下のように構成してある。

PlayerにはPlayerContainerPlayerStatusFloatingViewLogicを追加してある。

ゲージの時との違いは、別の子クラス(コンポーネント)を用意して追加するコンポーネントを差し替えただけだ。

実際に使う際はPrefab化して、Sceneに配置する時はHierarchyに追加して中身を調整するか、別途Prefab Variantとして保存しておくか、などする。

別シーン(プロジェクト)の場合

前提

以下の記事のプロジェクト構成を利用する。

サンプルとしてボタンを変えクリックイベントの実装を差し替える。

実装

interfaceは以下の通り。 なおボタンにはMRTK、RxにはR3を利用している。

public interface ICubeUIViewLogic
{
    Observable<Unit> OnButtonClicked { get; }
}

1つ目の実装。

public class CubeUIViewLogic : MonoBehaviour, ICubeUIViewLogic
{
    [SerializeField] private PressableButton button;

    private Subject<Unit> onButtonClicked = new Subject<Unit>();
    public Observable<Unit> OnButtonClicked => onButtonClicked;

    void Start()
    {
        button.OnClicked.AddListener(() => onButtonClicked.OnNext(Unit.Default));
    }
}

2つ目の実装。
サンプルの仕様上中身は全く同じで、PressableButtonに設定されるボタンがそれぞれで違うだけである。

public class HLCubeUIViewLogic : MonoBehaviour, ICubeUIViewLogic
{
    [SerializeField] private PressableButton button;

    private Subject<Unit> onButtonClicked = new Subject<Unit>();
    public Observable<Unit> OnButtonClicked => onButtonClicked;

    void Start()
    {
        button.OnClicked.AddListener(() => onButtonClicked.OnNext(Unit.Default));
    }
}

1つ目の実装は、Contentsプロジェクト内でSceneに直接配置する。
Hierarchyは以下のように構成してあり、UIにCubeUIViewLogic、親のCubeにCubeViewLogicを追加している。UIはPrefab化してある。

バイス側で2つ目の実装をしており、デバイス側のSceneから差し替えを指示する必要がある。 指示がない時はContentsのUIを、指示がある時はContentsのUIを破棄して指示されたものをInstantiateする。

public class CubeViewLogic : MonoBehaviour
{
    private ICubeUIViewLogic cubeUI;

    private void Start()
    {
        cubeUI = GetComponentInChildren<ICubeUIViewLogic>();

        var cubeUIPrefab = ViewConcreteRegister.CubeUI;
        if (cubeUIPrefab != null)
        {
            Destroy(((MonoBehaviour)cubeUI).gameObject);
            cubeUI = Instantiate(cubeUIPrefab, transform).GetComponent<ICubeUIViewLogic>();
        }

        cubeUI.OnButtonClicked
            .Subscribe(_ =>
            {
                Debug.Log("Clicked");
            })
            .RegisterTo(destroyCancellationToken);
    }
}

Scene間の値渡しはstaticクラスなSingletonにしてある。 ContentsのSceneを読み込む前にPrefabのGameObjectを設定して読み込まれるようにする。

public static class ViewConcreteRegister
{
    public static GameObject CubeUI { get; set; }
}
    ViewConcreteRegister.CubeUI = cubeUIPrefab;
    SceneManager.LoadSceneAsync("ContentsScene", LoadSceneMode.Additive);

バイス側では、Prefab Variantを作って変更を加えてある。Prefab Variantを使うと、Hierarchy上になくても変更を加えられる上、元のPrefabの更新も反映される。加えた変更の差分も確認できる。極力変更を少なくする場合には有効だろう。

実行すると、ViewConcreteRegisterにUIのPrefabが登録されていればそちらを、登録されていなければデフォルトのUIを使ってくれる。

補足

タイトルはViewになっているがViewだけとは限らない。 UnityはUI、Input、Graphics、Sound、Physics、Device IOなど、Clean Architecutreで言う最も外側の円の大部分を担っている。そのため、ComponentはViewでもあり、View以外からのInputでもあり、View以外へのOutputでもあり、色々な側面を持っている。

Unity - ユニティちゃんをURPで表示する

目次

環境

  • Unity 2022.3.18f1

準備

unity-chan.com

「ユニティちゃん 3Dモデルデータ」を使う場合、UnityChan_v1.4.0.unitypackageをダウンロードして、プロジェクトにインポートする。

「ユニティちゃんSunny Side Up(URP版)」を使う場合、UnityChanSSU_URP-release-1.0.5.zipをダウンロードして解凍する。フォルダの中からUnityChanSSU_URP-release-1.0.5\Assets 配下をまるごとプロジェクトのAssets配下にコピペする。

シーンにprefabを追加するといつものやつ。

シェーダーを解消する

Package Manager で Add package from git URL で、com.unity.toonshaderを指定して追加する。 (参考)

Unity Toon Shader以外のマテリアルを使用するモデルデータを使いたい場合は、コンバーターが用意されている。

docs.unity3d.com

https://unity-chan.com/images/imageLicenseLogo.png

この作品はユニティちゃんライセンス条項の元に提供されています

MRTK3 を使ったHoloLens2、Meta Quest3、MagicLeap2のマルチデバイスプロジェクト環境の構築

目次

開発環境

  • Unity 2022.3.21f1
  • MRTK3
    • Input 3.1
    • UX Components 3.1.1
    • Core Definition 3.1.1
  • HoloLens2
    • OpenXR Plugin 1.10.0
  • Meta Quest3
    • OpenXR Plugin 1.10.0
    • Meta XR Core SDK 62.0.0
    • Meta XR Interaction SDK 62.0.0
    • Meta XR Interaction SDK OVR Integration 62.0.0
  • MagicLeap2
    • MagicLeap Setup Tool 2.0.7
    • MagicLeap MRTK3 1.0.0-pre6
    • MagicLeap SDK 2.0.0

概要

MetaQuestとMagicLeapはどちらもプラットフォームがAndroidのため、1つのプロジェクトだと環境が競合する。

また、MagicLeapは他のデバイスと同じMRTKを共有できない。 MagicLeapはMRTKをForkして変更を加えているため、公式のツールからではなく独自のセットアップツールから導入する必要がある。

github.com

更に現時点(2024/3)では、MagicLeapのOpenXRはMRTKでは対応できていないため、OpenXRを使わないようアナウンスされている。

If updating to Magic Leap Unity SDK 1.10.0 or 1.11.0, there may be a compile issue if your project contains the Unity OpenXR package. A workaround for this is to remove the OpenXR package from the project in this situation.

エディタ拡張で環境の設定を切り替える事も考えられるが、今回は「Cubeをハンドトラッキングで操作する」共有のコンテンツプロジェクトとデバイス毎のプロジェクトを分け、upmで参照する構成で環境を構築する。

2024/3/22 追記
MRTK3 でもOpenXRに対応したもよう
検証記事書いた yotiky.hatenablog.com

コンテンツプロジェクト

手順

  • 3D(URP) Template でプロジェクトを作成
  • Mixed Reality Feature Toolで以下をインストール
    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
  • Project Settings > Package Manager
  • Package Manager
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
  • Project Settings > XR Plug-in Management > Project Validation
    • Fix Allを実行
  • 以降、Assets\Contents配下に作成していく

  • 空のSceneを作成してCubeを追加

    • Position Z:1
    • Rotation X:30 Y:30
    • Scale X:0.3 Y:0.3 Z:0.3
    • ObjectManipulator
  • 他プロジェクトから読み込み用のSceneLoaderを作成しておく
public class MainSceneLoader : MonoBehaviour
{
    [SerializeField] private string sceneName = "Main";

    void Start()
    {
        SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
    }
}
  • package.json を追加
{
"name": "com.vnext.contents",
"displayName": "vNext Contents",
"description": "",
"version": "0.0.1",
"unity": "2022.3",
"license": "",
"author": "yotiky",
"dependencies": {}
}
  • Assmebly Definitions を追加
    • 適宜、Assembly Definition References を追加

補足

依存関係のパッケージを追加する場合

  • package.jsonのdependenciesに追加する
  "dependencies": {
    "com.cysharp.r3": "1.1.11",
    "org.nuget.r3" : "1.1.11"
  }
  • 利用する側では、Project Settings > Package Manager でRegistriesが登録されていれば自動で解決してくれる

特殊フォルダー

yotiky.hatenablog.com

HoloLens

手順

  • 3D(URP) Template でプロジェクトを作成
  • Mixed Reality Feature Toolで以下をインストール
    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
    • Platform Support
      • OpenXR Plugin 1.10.0
  • Project Settings > Package Manager
  • Package Manager
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
  • PlatformをUWPに変更
  • Project Settings > XR Plug-in Management > Project Validation
    • Fix Allを実行
  • Project Settings > XR Plug-in Management > OpenXR

    • Enabled Interaction Profilesに以下を追加
  • 新しくSceneを追加

  • Main Cameraを削除して、MRTK XR Rigを追加
    • Camera Offsetを編集
      • Position Y:0
      • Tracking Origin Mode : Device
      • Camera Y Offset : 0
  • MRTKInputSimulator を追加

  • Project Settings > Package Manager

    • add package from disk で コンテンツプロジェクトのpackage.jsonを参照する
    • Packages\manifest.json絶対パスになっているので相対パスに修正しておく
    • "com.vnext.contents": "file:../../Unity.Contents/Assets/Contents",
  • 空のGameObjectを作成して、ContentsSceneLoaderを追加する

  • Build Settings

    • Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
  • Project Settings > Player

    • Company Name、Product Name、Package Nameを適宜設定

Quest

手順

  • 3D(URP) Template でプロジェクトを作成
  • Mixed Reality Feature Toolで以下をインストール
    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
    • Platform Support
      • OpenXR Plugin 1.10.0
  • Project Settings > Package Manager
  • Package Manager
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
  • PlatformをAndroidに変更
  • Project Settings > XR Plug-in Management > Project Validation
    • Fix Allを実行
  • 新しくSceneを追加
  • Main Cameraを削除して、MRTK XR Rigを追加
    • Camera Offsetを編集
      • Position Y:0
      • Tracking Origin Mode : Device
      • Camera Y Offset : 0
    • Main Cameraを編集
      • Output
        • HDR Rendering : Off
      • Camaera Settings Manager
        • Opaque Display
          • Clear Mode : Solid Color
          • Clear Color : 0,0,0,0
        • Transparent Display
          • Clear Mode : Solid Color
          • Clear Color : 0,0,0,0
  • MRTKInputSimulator を追加
  • Asset Storeから以下をMy Assetsに登録してインストール
    • Meta XR Core SDK
    • Meta XR Interaction SDK
    • Meta XR Interaction SDK OVR Integration
  • 「Enable Meta XR Feature Set」のダイアログが出るが必ずCancelする
    • 永遠と出続ける...
  • Project Settings > Meta XR

    • 以下の項目をignoreしてからFix Allを実行
    • Oculus must be added to the XR Plugin active loaders

    • Unity's OpenXR Plugin is not recommended when using the Oculus SDK, please use Oculus XR Plug-in instead

  • Project Settings > Player

    • 設定が書き換わってるか確認
  • Project Settings > Quality

    • Android のDefault Level をPerfomantに変更

    • Textures
      • Global Mipmap Limit : 0: Full Resolution
      • Anisotropic Textures : Per Texture
    • Soft Particleの設定はない(参考)
    • Terrain
      • Billboards Face Camera Position : チェック

  • Project ウィンドウから URP-Performant のURP Assetを選択

    • Quality
      • Anti Aliasing(MSAA) : 4x
    • Lighting(参考)
      • Additional Light : Per Pixel
      • Per Object Limit : 1

  • Project Settings > XR Plug-in Management

    • OpenXRとMeta XR feature groupをチェック
  • Project Settings > XR Plug-in Management > OpenXR
    • Enabled Interaction Profiles : 空
      • コントローラー使う時は「Oculus Touch Controller Profile」を追加
    • Open XR Feature Groups > Meta XR
      • Hand Tracking : チェック
      • Meta Quest Support : チェック外す
      • Motion Controller Model : チェック
  • Project Settings > XR Plug-in Management > Project Validation

    • 以下の項目を以外のFixを実行
    • Oculus must be added to the XR Plugin active loaders

    • Unity's OpenXR Plugin is not recommended when using the Oculus SDK, please use Oculus XR Plug-in instead

    • Editの項目は適宜無視
  • Scene に空のGameObjectを作成して、OVR ManagerとOVR Passthrough Layerを追加する

    • XR Plug-in Management > Project Validation に Passthrough の項目が出てくるのでFixを実行
    • OVR Manager
      • Target Devices : Quest3にチェック
      • Quest Features > Hand Tracking Support : Controllers And Hands
      • Insight Passthrough : Enable Passthroughにチェック
    • OVR Passthrough Layer
      • Placement : Underlay
      • Opacity : 1
  • Project Settings > Package Manager

    • add package from disk で コンテンツプロジェクトのpackage.jsonを参照する
    • Packages\manifest.json絶対パスになっているので相対パスに修正しておく
    • "com.vnext.contents": "file:../../Unity.Contents/Assets/Contents",
  • 空のGameObjectを作成して、ContentsSceneLoaderを追加する

  • Build Settings

    • Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
  • Project Settings > Player

    • Company Name、Product Name、Package Nameを適宜設定

補足

コントローラーを使う場合

  • Project Settings > XR Plug-in Management > OpenXR
    • Enabled Interaction Profiles : Oculus Touch Controller Profile を追加する
  • ハンドトラッキングでは操作できなくなる

ずっと出続ける「Enable Meta XR Feature Set」のダイアログ

  • Enableにすると何が変わるかと言うと以下Standaloneの設定

  • Enableにしてみてもさしあたり特に影響なさそうに見える

MagicLeap

手順

  • Magic Leap Hubを開く

    • Package Manager
      • Unity のパッケージをすべてインストール
      • All タブでUnity MRTK3のインストール先フォルダを開いておく
  • 3D(URP) Template でプロジェクトを作成

  • Asset StoreからMagic Leap Setup ToolをMy Assetsに登録してインストール

  • Magic Leap > Project Setup Toolを開く

    • Magic Leap SDK に最新のSDKのフォルダを設定
    • Apply Allを実行
    • Add Magic Leap Registryダイアログ
      • Use Magic Leap Registryを選択
        • Project Settings > Package Managerに追加される
  • Project Settings > XR Plug-in Management > Project Validation
    • 問題がないことを確認
  • Assets\Settings 配下のURP関連ファイルを全て削除
  • 新たにURP Asset(with Universal Renderer)を作成
    • Quality
      • HDR : チェックを外す
    • Shadows
      • Last Border : 5
  • Project Settings > Graphics

    • Scriptable Render Pipeline Settings に作成したURP Assetを設定
  • Mixed Reality Feature Toolで以下をインストール

    • MRTK3
      • MRTK Core Definition 3.1.1
      • MRTK Input 3.1
      • MRTK UX Components 3.1.1
  • Project Settings > Package Manager
  • エクスプローラーでPackagesフォルダを開く

    • com.magicleap.mrtk3フォルダを作成
    • Magic Leap Hubで開いておいたフォルダから、com.magicleap.mrtk3-1.0.0-pre.6.tgzをコピペする
  • Package Manager

    • add package from tarball
      • 上記、com.magicleap.mrtk3-1.0.0-pre.6.tgzを追加する
    • My Registriesを選択して、以下をインストール
      • glTFast
      • KTX/Basis Universal Texture
  • Project Settings > MRTK3
    • ProfileにMRTKProfile-MagicLeapを設定
  • Project Settings > MRTK3 > Magic Leap Settings
    • Permissions で権限を設定
      • EYE_TRACKING
      • HAND_TRACKING
      • etc
    • AndroidManifest.jsonにも追加
<manifest>
    <uses-permission android:name="com.magicleap.permission.EYE_TRACKING" />
    <uses-permission android:name="com.magicleap.permission.HAND_TRACKING" />
</manifest>
  • Project Settings > XR Plug-in Management > Project Validation

    • 問題ないか確認
  • 新しくSceneを追加

  • Main Cameraを削除して、MRTK XR Rig - MagicLeapを追加
    • 公式には書かれてないが必要に応じて、Camera Offsetを編集
      • Position Y:0
      • Tracking Origin Mode : Device
      • Camera Y Offset : 0
  • MRTKInputSimulator を追加

  • Project Settings > Package Manager

    • add package from disk で コンテンツプロジェクトのpackage.jsonを参照する
    • Packages\manifest.json絶対パスになっているので相対パスに修正しておく
    • "com.vnext.contents": "file:../../Unity.Contents/Assets/Contents",
  • 空のGameObjectを作成して、ContentsSceneLoaderを追加する

  • Build Settings

    • Scenes In Build にこのプロジェクトとコンテンツプロジェクトの2つのSceneを追加する
  • Project Settings > Player
    • Company Name、Product Name、Package Nameを適宜設定

補足

ジオメトリシェーダやMRTKの空間メッシュのシェーダを使う場合

KeyBoard

  • プロジェクトで Hololens システム キーボードを使用している場合は、システム キーボードの呼び出しを MRTK の NonNativeKeyboard の代替機能に置き換える必要があります。

関連

yotiky.hatenablog.com

CAGC 2024資料一覧

OP

ENGINEER A

ENGINEER B

CREATOR C

ピックアップ記事

2024/5 ~ フリーランスのお仕事募集中

コラム

yotiky.hatenablog.com

設計

yotiky.hatenablog.com

技術

yotiky.hatenablog.com

その他