【问题标题】:Unity VR Controller UI InteractionUnity VR 控制器 UI 交互
【发布时间】:2019-07-20 20:54:10
【问题描述】:

我目前处于精神崩溃的边缘。我花了几个小时构建自己的激光笔,让它在所有东西上发射光线投射,并尝试让它与我的 UI 一起工作。但它不会。至少不正确。

工作原理:Raycast 和画线。

我挣扎的地方:现在我有两个选择。 A) 没有网格渲染器的标准 UI 按钮和立方体。这使按钮根据其按钮脚本通过其动画淡化。但它不会解决 On 按钮单击事件!所以我在按钮上添加了一个事件触发器——它确实会触发“指针输入”事件!但不是它的“指针点击”事件:(

所以我的想法是:我的点击一定是执行错误!要对此进行测试: B) 为立方体添加了一个事件触发器,即按钮碰撞器。将其设置为“指针单击”。还有多田!有用! BUUUUT 这会杀死按钮的动画!为什么?

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

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

感谢您的帮助!!

干杯 弗洛尔

编辑:当前代码:

        {//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;
        }
    }

【问题讨论】:

  • 感谢您添加代码,仍然很难弄清楚发生了什么。代码的哪一部分没有做你想做的事?
  • @ILiveForVR 我评论了你的回答 - 这是否澄清了问题/我的困惑?

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


【解决方案1】:

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

【讨论】:

  • 我在上面添加了我的代码。我的错!我不明白按钮事件触发器如何在pointerEnter上触发,但对pointerClick没有反应。而立方体清楚地理解pointerClick事件但取出动画(我猜按钮交互性消失了)
  • 刚刚为每个案例添加了一个事件。按钮的事件触发组件对除 pointerClick 之外的所有内容作出反应。这对我来说是不合理的!因为立方体的事件触发器清楚地区分了 PointerUp 和 pointerClick
  • 你在代码的第二部分在哪里设置pointerPress ?您正在检查它,但我看不到它的设置位置。这是与您设置 pointerEnter 的第一段代码不同的地方
  • pointerPressExecuteEvents 系统中没有pointerPressHandler。因此我改用pointerClickHandler。 (如果我们按下并释放同一个对象,那么我们点击了它(OnPointerClick))
  • 啊,那么第二段代码是针对对象的吗?第一个是你的指针?因为您设置了eventData.pointerEnter = rayHit.transform.gameObject;,但我看不到您为代码的“else if”部分设置了“eventData.pointerPress”的位置。您将其设置在第一个 if 中,但这永远不会到达 else if 对吧?
猜你喜欢
  • 1970-01-01
  • 2019-07-21
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多