MRが楽しい

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

MRTKでHoloLens2の空間メッシュの表示方法や有効無効を動的に切り替える その2

本日はMRTKの小ネタ枠です。
MRTKで空間メッシュの表示方法や有効無効を動的に切り替える方法を記事にします。
今回は空間メッシュ自体の有効無効を切り替える方法です。

前回記事

以下の前回記事の続きです。
bluebirdofoz.hatenablog.com

SpatialAwarenessの設定

MRTKを利用してHoloLens2アプリを作成する場合、空間メッシュはSpatialAwarenessの設定で管理されます。
SpatialAwarenessの有効無効を切り替えるにはCoreServices.SpatialAwarenessSystemにアクセスします。
learn.microsoft.com

// 全てのメッシュオブザーバを有効にする
CoreServices.SpatialAwarenessSystem.Enable();

// 全てのメッシュオブザーバを無効にする
CoreServices.SpatialAwarenessSystem.Disable();

空間メッシュの有効無効は全てのメッシュオブザーバで共通管理されるため、使用しているXRプラグインに関わらず、CoreServices.SpatialAwarenessSystemから変更可能です。

サンプルスクリプト

新たにSpatialAwarenessの有効無効を切り替える関数を持った以下のスクリプトを作成しました。
・SpatialAwarenessEnableSwitch.cs

using UnityEngine;

using Microsoft.MixedReality.Toolkit;

public class SpatialAwarenessEnableSwitch : MonoBehaviour
{
    public void SwitchEnable()
    {
        // 全てのメッシュオブザーバを有効にする
        CoreServices.SpatialAwarenessSystem.Enable();
    }

    public void SwitchDisable()
    {
        // 全てのメッシュオブザーバを無効にする
        CoreServices.SpatialAwarenessSystem.Disable();
    }
}

作成したサンプルスクリプトを適当なオブジェクトにアタッチし、シーンに配置したボタンから関数を呼び出せるようにしました。


HoloLens2上での動作確認

アプリケーションをビルドしてHoloLens2にデプロイします。
ボタン操作で空間メッシュの有効無効を切り替えることができれば成功です。

前回記事の表示切替との違いは有効無効切り替えの場合、メッシュそのものを無効化しているため当たり判定も消失します。
一方で表示設定を無効(None)にした場合は当たり判定はそのまま残っています。