Unity VR Controller UI交互

时间:2019-02-27 07:39:40

标签: c# user-interface unity3d virtual-reality

我目前正处于精神崩溃的边缘。我花费了数小时来构建自己的激光笔,使其对所有物体都进行射线广播,并尝试使其与我的UI一起使用。但是不会。至少不正确。

有效方法:光线投射和绘制线条。

我在哪里挣扎:现在我有两个选择。 A)标准UI按钮和没有网格渲染器的多维数据集。这会使按钮根据其按钮脚本通过其动画淡入淡出。但是它将无法解决“打开”按钮的单击事件!因此,我在按钮上添加了一个事件触发器-该按钮确实会触发“指针输入”事件!但不是它的“指针点击”事件:(

所以我的想法是:我的点击操作必须执行错误!要对此进行测试: B)向多维数据集添加了一个事件触发器,即按钮对撞机。将其设置为“指针单击”。和田田!有用! BUUUUT会杀死按钮的动画!为什么?

感谢任何想法!如果您有很好的提示,我也会考虑新的起点!

下一个问题是滑块。有关如何使它们工作的任何提示?

感谢您的帮助!

欢呼 Flo

编辑:当前代码:

        {//Record this data and tell the object that we are pointing at them (OnPointerEnter)
        eventData.pointerEnter = rayHit.transform.gameObject;
        ExecuteEvents.ExecuteHierarchy(eventData.pointerEnter, eventData, ExecuteEvents.pointerEnterHandler);


        //If trigger becomes state down ...
        if (SteamVR_Actions._default.GrabPinch.GetStateDown(handType) && eventData.pointerEnter != null)
        {
            //...tell the object that we have pressed it (OnPointerDown)
            eventData.pointerPressRaycast = eventData.pointerCurrentRaycast;
            eventData.pointerPress = ExecuteEvents.ExecuteHierarchy(eventData.pointerEnter, eventData, ExecuteEvents.pointerDownHandler);
        }
        //Otherwise, if we just released the primary input axis...
        else if (SteamVR_Actions._default.GrabPinch.GetStateUp(handType))
        {
            //...tell the object than we have stopped pressing it (OnPointerUp)
            if (eventData.pointerPress != null)
                ExecuteEvents.ExecuteHierarchy(eventData.pointerPress, eventData, ExecuteEvents.pointerUpHandler);

            //...finally, if we pressed and released the same object, then we have clicked it (OnPointerClick)
            if (eventData.pointerPress == eventData.pointerEnter)
                ExecuteEvents.ExecuteHierarchy(eventData.pointerEnter, eventData, ExecuteEvents.pointerClickHandler);

            eventData.pointerPress = null;
        }
    }

1 个答案:

答案 0 :(得分:1)

没有代码很难说,但是我认为您是用自己的方法覆盖了指针单击事件?那可以解释为什么动画不见了。 您可以通过在基类上调用事件来解决它。 base.OnPointerClick()或类似的东西。