MRが楽しい

MRやVRについて学習したことを書き残す

HoloLens2でホロモンアプリを作る その99(MRTK3環境とMRTKv2環境で動作するコードを切り替える)

本日はアプリ作成枠です。
HoloLens2でホロモンアプリを作る進捗を書き留めていきます。

今回は MRTK3 の習熟を兼ねてホロモンアプリを MRTK3 環境で動作するように改修を行いました。

MRTK3環境とMRTKv2環境の切り替え

現在(2022/6/22)時点では MRTK3 はパブリックプレビューです。
あくまでメインの開発環境は MRTKv2 としたいので MRTK3 環境と MRTKv2 環境で動作するコードを切り替える仕組みを追加してみました。

Scripting Define Symbols

今回は Scripting Define Symbols の設定を使って MRTK3 と MRTKv2 の利用を切り替えました。
docs.unity3d.com

実装例

例えば MRTKv2 でプレイヤーの頭部座標を取得する際、Microsoft.MixedReality.Toolkit.Utilities.CameraCache でカメラ情報が取得できます。
しかし MRTK3 では Microsoft.MixedReality.Toolkit.CameraCache のパスに切り替わっているようでした。
このような MRTKv2 と MRTK3 に依存する処理を別クラスでまとめて、以下のように定義で参照を切り替える形にコードを見直しました。

カメラ情報の取得例

・MainCameraAccess.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

#if XRPLATFORM_MRTK3
using HoloMonApp.Content.XRPlatform.MRTK3;
#elif XRPLATFORM_MRTKV2
using HoloMonApp.Content.XRPlatform.MRTKv2;
#endif

namespace HoloMonApp.Content.XRPlatform
{
    /// <summary>
    /// カメラ参照の切り替えクラス
    /// </summary>
    public class MainCameraAccess
    {
#if XRPLATFORM_MRTK3
        private MainCameraAccessMRTK3 p_MainCameraAccess;
#elif XRPLATFORM_MRTKV2
        private MainCameraAccessMRTKv2 p_MainCameraAccess;
#endif

        public MainCameraAccess(Component a_Component)
        {
#if XRPLATFORM_MRTK3
            p_MainCameraAccess = new MainCameraAccessMRTK3();
#elif XRPLATFORM_MRTKV2
            p_MainCameraAccess = new MainCameraAccessMRTKv2();
#endif
    }

    public Camera GetMainCamera()
        {
            Camera camera = null;
#if XRPLATFORM_MRTK3
            camera = p_MainCameraAccess.GetMainCamera();
#elif XRPLATFORM_MRTKV2
            camera = p_MainCameraAccess.GetMainCamera();
#endif
            return camera;
        }
    }
}

・MainCameraAccessMRTKv2.cs

#if XRPLATFORM_MRTKV2
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// CameraCacheへのアクセスのため
using Microsoft.MixedReality.Toolkit.Utilities;

namespace HoloMonApp.Content.XRPlatform.MRTKv2
{
    public class MainCameraAccessMRTKv2
    {
        public MainCameraAccessMRTKv2()
        { }

        public Camera GetMainCamera()
        {
            return CameraCache.Main;
        }
    }
}
#endif

・MainCameraAccessMRTK3.cs

#if XRPLATFORM_MRTK3
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// CameraCacheへのアクセスのため
using Microsoft.MixedReality.Toolkit;

namespace HoloMonApp.Content.XRPlatform.MRTK3
{
    public class MainCameraAccessMRTK3
    {
        public MainCameraAccessMRTK3(){ }

        public Camera GetMainCamera()
        {
            return CameraCache.Main;
        }
    }
}
#endif

その他、ハンドトラッキングや音声入力なども同じように同様の処理を実現する実装方法を調査して上記スクリプトのように比較できる形で進めていきます。