访问 MRTK 中的输入状态 - MRTK2

通过遍历附加到输入源的控制器,可以直接在 MRTK 中查询所有输入的状态。 MRTK 还提供了一种便捷方法,用于访问眼睛、双手、头部和运动控制器的位置和旋转。

请参阅 InputDataExample 场景,了解通过遍历控制器和使用 InputRayUtils 类查询输入的示例。

示例:MRTK 中的访问位置、头部、双手、眼睛的旋转

MRTK 的 InputRayUtils 类提供用于方便访问手部射线、头部射线、注视射线和运动控制器射线的方法。

将这些命名空间添加到脚本:

using Microsoft.MixedReality.Toolkit.Input;
using Microsoft.MixedReality.Toolkit.Utilities;

示例代码:

// Get the head ray
UnityEngine.Ray headRay = InputRayUtils.GetHeadGazeRay();

// Get the right hand ray
if (InputRayUtils.TryGetHandRay(Handedness.Right, out UnityEngine.Ray rightHandRay))
{
    // Right hand ray is available
}
else
{
    // Right hand ray is not available
}

示例:访问位置,场景中处于活动状态的所有 6DOF 控制器的旋转

将这些命名空间添加到脚本:

using Microsoft.MixedReality.Toolkit;
using Microsoft.MixedReality.Toolkit.Input;

示例代码:

foreach (IMixedRealityController controller in CoreServices.InputSystem.DetectedControllers)
{
    // Interactions for a controller is the list of inputs that this controller exposes
    foreach (MixedRealityInteractionMapping interactionMapping in controller.Interactions)
    {
        // 6DOF controllers support the "SpatialPointer" type (pointing direction)
        // or "GripPointer" type (direction of the 6DOF controller)
        if (interactionMapping.InputType == DeviceInputType.SpatialPointer)
        {
            Debug.Log("Spatial pointer PositionData: " + interactionMapping.PositionData);
            Debug.Log("Spatial pointer RotationData: " + interactionMapping.RotationData);
        }

        if (interactionMapping.InputType == DeviceInputType.SpatialGrip)
        {
            Debug.Log("Spatial grip PositionData: " + interactionMapping.PositionData);
            Debug.Log("Spatial grip RotationData: " + interactionMapping.RotationData);
        }
    }
}

另请参阅