首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MRTK和夹点按压

MRTK和夹点按压
EN

Stack Overflow用户
提问于 2020-03-06 10:53:07
回答 1查看 312关注 0票数 0

我正在使用MRTK 2.3.0,试图从混合现实运动控制器捕捉"Grip Press“事件。

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

根据这个文档:https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/MixedRealityConfigurationGuide.html手柄应该是一个“浮动”,因为它被设计成单轴(我想知道为什么,因为它是一个按钮,而不是一个触发器...)。不过,我正试着在我能捕捉到的地方...不能工作。

有没有人明白我到底想说什么?(对不起,下面的代码还包括我可以在没有hickup的情况下捕获的其他事件)。

代码语言:javascript
复制
 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");
 }
EN

回答 1

Stack Overflow用户

发布于 2020-03-07 04:15:44

好的..。我得到了这个……这是MRTK中的一个BUG。

我定义了18个动作(当你有DPad left,up,down等的时候,它很快就过去了!)

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

代码语言:javascript
复制
 IndexOutOfRangeException: Index was outside the bounds of the array.
 Microsoft.MixedReality.Toolkit.Input.Editor.InputActionPropertyDrawer.OnGUI 

因此,该操作不起作用...

我尝试使用另一个InputAction,并将其分配给grab按钮(在本例中我使用了选择),它就像一个护身符……

当心……

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60556905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档