MRTK и Grip Press - PullRequest
       23

MRTK и Grip Press

0 голосов
/ 06 марта 2020

Я использую MRTK 2.3.0, пытаясь поймать событие «Grip Press» от контроллера движений Mixed Reality.

Я настроил действие ввода в наборе инструментов MRTK в иерархии единства. Я также назначил действие кнопке ручки контроллера в Определениях контроллеров. Я использую следующий код и убедился, что переменная Grip назначена событию Grip Press. Ничего не происходит ... Я могу поймать тачпад и джойстик, нажатие кнопки меню, но не Grip? Почему?

Согласно этой документации: https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/MixedRealityConfigurationGuide.html Ручка должна быть "плавающей", поскольку она спроектирована как одна ось (интересно, почему, поскольку это кнопка, а не триггер. ..). Тем не менее, я пытаюсь поймать событие, где я могу ... не работать ...

Кто-нибудь понимает, какого чёрта я пытаюсь здесь сказать? (извините, код ниже также включает в себя другие события, которые я могу поймать без взлома).

 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");
 }

1 Ответ

0 голосов
/ 06 марта 2020

Хорошо ... Я понял ... Это ошибка в MRTK.

У меня есть 18 заданных действий (когда у вас есть DPad слева, вверх, вниз и т. Д. c, это происходит быстро !).

Когда я пытаюсь назначить свой MixedRealityInputAction для InputAction в Инспекторе, когда я пытаюсь выбрать GrabPressed (который является 18-м действием), я получаю

 IndexOutOfRangeException: Index was outside the bounds of the array.
 Microsoft.MixedReality.Toolkit.Input.Editor.InputActionPropertyDrawer.OnGUI 

Поэтому действие не работает ....

Я попытался использовать другой InputAction вместо этого и назначить его на кнопку захвата (я использовал Select в этом случае), и он работает как шарм ....

Берегись ....

...