MRが楽しい

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

MRTKの空間認識システムのレイヤー番号をスクリプトから取得する

本日は MRTK の小ネタ枠です。
MRTKの空間認識システムのレイヤー番号をスクリプトから取得する方法を記事にします。
f:id:bluebirdofoz:20210410231706j:plain

MRTKの空間認識システム

docs.microsoft.com

MRTKの空間認識システムのレイヤー番号をスクリプトから取得するには以下のようなコードを利用します。

// 空間認識のオブザーバを取得する
IMixedRealitySpatialAwarenessMeshObserver SpatialAwarenessMeshObserver =
    CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();

// オブザーバからレイヤー番号を取得する
int spatialAwarenessLayer = SpatialAwarenessMeshObserver.MeshPhysicsLayer;

サンプルスクリプト

Collider の Trigger イベントから空間認識のメッシュを判定する以下のサンプルスクリプトを作成しました。
・SpatialMapTest

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

// CoreSystemへのアクセスのため
using Microsoft.MixedReality.Toolkit;
// 空間認識情報の取得のため
using Microsoft.MixedReality.Toolkit.SpatialAwareness;

namespace HMProject.Test
{
    [RequireComponent(typeof(Collider))]
    public class SpatialMapTest : MonoBehaviour
    {
        [SerializeField, Tooltip("空間認識レイヤー番号")]
        int p_SpatialAwarenessLayer;

        /// <summary>
        /// 起動処理
        /// </summary>
        void Start()
        {
            // 空間認識のオブザーバを取得する
            IMixedRealitySpatialAwarenessMeshObserver SpatialAwarenessMeshObserver =
                CoreServices.GetSpatialAwarenessSystemDataProvider<IMixedRealitySpatialAwarenessMeshObserver>();

            // オブザーバからレイヤー番号を取得する
            p_SpatialAwarenessLayer = SpatialAwarenessMeshObserver.MeshPhysicsLayer;
        }


        private void OnTriggerStay(Collider collider)
        {
            // オブジェクトのレイヤー番号を取得する
            int layernumber = collider.gameObject.layer;

            // 空間認識レイヤーか否か
            if (layernumber == p_SpatialAwarenessLayer)
            {
                Debug.Log("OnTriggerStay : " + collider.name + " is Spatial Awareness Layer.");
            }
            else
            {
                Debug.Log("OnTriggerStay : " + collider.name + " is not Spatial Awareness Layer.");
            }
        }
    }
}

f:id:bluebirdofoz:20210410231735j:plain

サンプルスクリプトを Collider コンポーネントを設定したオブジェクトに追加します。
f:id:bluebirdofoz:20210410231752j:plain

この状態でシーンを再生してみます。
ログを確認すると空間認識のメッシュとその他のメッシュをレイヤーで判別できていることがわかります。
f:id:bluebirdofoz:20210410231806j:plain