本日は MRTK の小ネタ枠です。
MRTKの空間認識システムのレイヤー番号をスクリプトから取得する方法を記事にします。
MRTKの空間認識システム
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."); } } } }
サンプルスクリプトを Collider コンポーネントを設定したオブジェクトに追加します。
この状態でシーンを再生してみます。
ログを確認すると空間認識のメッシュとその他のメッシュをレイヤーで判別できていることがわかります。