本日はアプリ作成枠です。
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
その他、ハンドトラッキングや音声入力なども同じように同様の処理を実現する実装方法を調査して上記スクリプトのように比較できる形で進めていきます。