本日は MRTK の小ネタ枠です。
MRTKでコントローラの座標を取得する方法を記事にします。
IMixedRealityInputHandler
MRTK を使って入力のポーズ情報を取得するには IMixedRealityInputHandler
頭部追従やハンドトラッキング、コントローラなど、プロバイダーを通して入力ソースのポーズ情報を受け取ることができます。
learn.microsoft.com
learn.microsoft.com
サンプルコード
ハンドトラッキングとコントローラのポーズ情報を取得するサンプルスクリプトを作成しました。
・MixedRealityPoseTest.cs
using System; using System.Collections; using System.Collections.Generic; using Microsoft.MixedReality.Toolkit; using Microsoft.MixedReality.Toolkit.Input; using Microsoft.MixedReality.Toolkit.Utilities; using UnityEngine; public class MixedRealityPoseTest : MonoBehaviour, IMixedRealityInputHandler<MixedRealityPose> { [SerializeField] private Pose _controllerPose; [SerializeField] private Pose _handPose; private void OnEnable() { CoreServices.InputSystem?.RegisterHandler<IMixedRealityInputHandler<MixedRealityPose>>(this); } private void OnDisable() { CoreServices.InputSystem?.UnregisterHandler<IMixedRealityInputHandler<MixedRealityPose>>(this); } public void OnInputChanged(InputEventData<MixedRealityPose> eventData) { switch (eventData.InputSource.SourceType) { case InputSourceType.Hand: _handPose.position = eventData.InputData.Position; _handPose.rotation = eventData.InputData.Rotation; break; case InputSourceType.Controller: _controllerPose.position = eventData.InputData.Position; _controllerPose.rotation = eventData.InputData.Rotation; break; default: throw new ArgumentOutOfRangeException(); } } }
以下の通り、入力ソースの種別ごとにポーズ情報を取得できます。