Input MRTK和夹持压力机

Input MRTK和夹持压力机,input,controller,mrtk,Input,Controller,Mrtk,我正在使用MRTK 2.3.0尝试从混合现实运动控制器捕捉“夹点按压”事件 我已经在Unity层次结构中的MRTK工具箱中设置了输入操作。我还在控制器定义中将该操作指定给控制器的夹点按钮。我正在使用以下代码,并确保将Grip变量指定给Grip Press事件。什么都没发生。。。我能抓住触摸板和操纵杆,按菜单按钮,但抓不住?为什么? 根据本文档:夹点应为“浮动”,因为它设计为单轴(我想知道为什么,因为它是按钮而不是触发器…)。然而,我正在努力赶上我可以。。。不工作 有人明白我到底想说什么吗?(很抱

我正在使用MRTK 2.3.0尝试从混合现实运动控制器捕捉“夹点按压”事件

我已经在Unity层次结构中的MRTK工具箱中设置了输入操作。我还在控制器定义中将该操作指定给控制器的夹点按钮。我正在使用以下代码,并确保将Grip变量指定给Grip Press事件。什么都没发生。。。我能抓住触摸板和操纵杆,按菜单按钮,但抓不住?为什么?

根据本文档:夹点应为“浮动”,因为它设计为单轴(我想知道为什么,因为它是按钮而不是触发器…)。然而,我正在努力赶上我可以。。。不工作

有人明白我到底想说什么吗?(很抱歉,下面的代码还包括其他我不需要打嗝就能捕捉到的事件)

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用Microsoft.MixedReality.Toolkit.Input;
使用Microsoft.MixedReality.Toolkit;
公共类测试输入:MonoBehavior、ImixedRealityBaseinpAuthandler、,
IMixedRealityInputHandler,IMixedRealityInputHandler
{
公共混合真实输入触发器、夹点、滚动、滑动、操纵杆、DPad、触摸板单击、触摸板触摸、菜单按下;
公共混合健康行动DPadUp、DPADOWN、DPadLeft、DPadRight、JoystickUp、JOYSTIKDOWN、JOYSTIKLEFT、JOYSTICK;
private bool TouchPad Pressed,MenuButton Pressed,Grab Pressed,TouchDialogPad Pressed,TouchPad Clicked,ThouchPad Touched,
ThumbstickActive、ThumbstickPressed、VRManufactionStarted、ScrubStarted、PlayPause=false;
私有void OnEnable()
{
IMixedRealityInputSystem输入系统;
if(MixedRealityServiceRegistry.TryGetService(OutInputSystem))
{
输入系统?.RegisterHandler(此);
输入系统?.RegisterHandler(此);
输入系统?.RegisterHandler(此);
输入系统?.RegisterHandler(此);
}
}
私有无效不可撤销()
{
IMixedRealityInputSystem输入系统;
if(MixedRealityServiceRegistry.TryGetService(OutInputSystem))
{
inputSystem?.UnregisterHandler(此);
inputSystem?.UnregisterHandler(此);
inputSystem?.UnregisterHandler(此);
inputSystem?.UnregisterHandler(此);
}
}
输入更改时的公共无效(输入事件数据)
{
Debug.Log(“InputChanged”);
如果(ed.MixedRealityInputAction==DPad)
{
Log(“触摸板位于:“+ed.InputData.x.ToString()+”,“+ed.InputData.y.ToString()”);
}
如果(ed.MixedRealityInputAction==操纵杆)
{
Log(“+ed.InputData.x.ToString()+”、“+ed.InputData.y.ToString()”)处的操作手柄;
}
}
输入更改时的公共无效(输入事件数据)
{
if(ed.MixedRealityInputAction==menuppressed)
{
Log(“按下菜单按钮”);
//ActionText.text=“抓取按下”;
}
}
输入更改时的公共无效(输入事件数据)
{
Log(“浮点更改”);
if(ed.MixedRealityInputAction==夹点)
Log(“抓取按下”);
}

好的……我知道了……这是MRTK中的一个BUG

我定义了18个动作(当你有DPad左、上、下等动作时,动作会很快)

当我尝试将MixedRealityInputAction分配给Inspector中的一个InputAction时,当我尝试选择GrabPressed(这是第18个操作)时,我得到

因此,该行动不起作用

我尝试使用另一个输入,并将其分配给抓取按钮(我在本例中使用了Select),它就像一个符咒

当心

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 using Microsoft.MixedReality.Toolkit.Input;
 using Microsoft.MixedReality.Toolkit;

 public class TestInput : MonoBehaviour, IMixedRealityBaseInputHandler, 
 IMixedRealityInputHandler<Vector2>, IMixedRealityInputHandler
 {
 public MixedRealityInputAction Trigger, Grip, Scroll, Swipe, Joystick, DPad, TouchPadClicked, TouchPadTouched, MenuPressed;
 public MixedRealityInputAction DPadUp, DPadDown, DPadLeft, DPadRight, JoystickUp, JoystickDown, JoystickLeft, JoystickRight;
 private bool TouchpadPressed, MenuButtonPressed, GrabPressed, TouchDialogPadPressed, TouchpadClicked, Thouchpadtouched,
           ThumbstickActive, ThumbstickPressed, VRManipulationStarted, ScrubStarted, PlayPause = false;


private void OnEnable()
{
    IMixedRealityInputSystem inputSystem;
    if (MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem))
    {
        inputSystem?.RegisterHandler<IMixedRealityBaseInputHandler>(this);
        inputSystem?.RegisterHandler<IMixedRealityInputHandler<Vector2>>(this);
        inputSystem?.RegisterHandler<IMixedRealityInputHandler>(this);
        inputSystem?.RegisterHandler<IMixedRealityInputHandler<float>>(this);
    }
}

private void OnDisable()
{
    IMixedRealityInputSystem inputSystem;
    if (MixedRealityServiceRegistry.TryGetService<IMixedRealityInputSystem>(out inputSystem))
    {
        inputSystem?.UnregisterHandler<IMixedRealityBaseInputHandler>(this);
        inputSystem?.UnregisterHandler<IMixedRealityInputHandler<Vector2>>(this);
        inputSystem?.UnregisterHandler<IMixedRealityInputHandler>(this);
        inputSystem?.UnregisterHandler<IMixedRealityInputHandler<float>>(this);
    }
}

public void OnInputChanged(InputEventData<Vector2> ed)
{
    Debug.Log("InputChanged");
    if (ed.MixedRealityInputAction == DPad)
    {
        Debug.Log("Touched Touchpad at:" + ed.InputData.x.ToString() + "," + ed.InputData.y.ToString());
    }
    if (ed.MixedRealityInputAction == Joystick)
    {
        Debug.Log("Touched Joystick at:" + ed.InputData.x.ToString() + "," + ed.InputData.y.ToString());
    }
}

public void OnInputChanged(InputEventData ed)
{
    if (ed.MixedRealityInputAction == MenuPressed)
    {
        Debug.Log("Menu button pressed");
        //ActionText.text = "Grab pressed";
    }

 }

 public void OnInputChanged(InputEventData<float> ed)
 {
    Debug.Log("Float Changed");
    if (ed.MixedRealityInputAction == Grip)
        Debug.Log("Grab Pressed");
 }
 IndexOutOfRangeException: Index was outside the bounds of the array.
 Microsoft.MixedReality.Toolkit.Input.Editor.InputActionPropertyDrawer.OnGUI