Проведите пальцем по сенсорной панели Oculus GO, чтобы вызвать щелчки пользовательского интерфейса, когда это не должно - PullRequest
1 голос
/ 04 июня 2019

Использование: Unity 2018.4.1 LTS & Oculus GO

Я использую указатель взгляда для взаимодействия с Unity UI.

Это должно происходить, когда вы нажимаете триггер, именно так, как я его определил в своем скрипте: проведите пальцем влево или вправо по сенсорной панели go-контроллера, однако также запускает щелчки. Я не определил это сам, просто так происходит, и я не могу понять, как обойти это.

Я нашел и возился с решениями, предложенными в этой теме и этой теме .

Однако ни одно из этих решений не дало мне способа избавиться от этих щелчков, сохраняя при этом щелчки триггеров индекса.

Мой Менеджер ввода (Взаимодействие индекса с пользовательским интерфейсом в OVRInputModule, кажется, происходит):


 private void Update()
        {

            if (OVRInput.GetDown(OVRInput.Button.PrimaryTouchpad) || OVRInput.GetDown(OVRInput.Button.Two))
            {
                ToggleVidInterface();

            }

            if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger))
            {
                StartCoroutine(TouchpadCounter()); 
            }

        }

        IEnumerator TouchpadCounter()
        {
            int secondsForCounting = 2;
            float startTime = Time.time;
            int touchCount = 0;

            while (Time.time - startTime <= secondsForCounting && OVRInput.Get(OVRInput.Button.PrimaryIndexTrigger))
            {
                if (OVRInput.GetDown(OVRInput.Button.PrimaryTouchpad))
                {
                    touchCount++;
                    Debug.Log("touchCount for Admin Menue: " + touchCount);
                }

                if (touchCount >= 3)
                {
                    ActivateAdminMenue();
                }

                yield return null;
            }

            yield return null;
        }

Часть OVRInputModule (я не знаю, правильная ли это часть):

        /// <summary>
        /// Get state of button corresponding to gaze pointer
        /// </summary>
        /// <returns></returns>
        virtual protected PointerEventData.FramePressState GetGazeButtonState()
        {
            var pressed = Input.GetKeyDown(gazeClickKey) || OVRInput.GetDown(joyPadClickButton);
            var released = Input.GetKeyUp(gazeClickKey) || OVRInput.GetUp(joyPadClickButton);



#if UNITY_ANDROID && !UNITY_EDITOR
            // On Gear VR the mouse button events correspond to touch pad events. We only use these as gaze pointer clicks
            // on Gear VR because on PC the mouse clicks are used for actual mouse pointer interactions.
            pressed |= Input.GetMouseButtonDown(0);
            released |= Input.GetMouseButtonUp(0);
#endif



            if (pressed && released)
                return PointerEventData.FramePressState.PressedAndReleased;
            if (pressed)
                return PointerEventData.FramePressState.Pressed;
            if (released)
                return PointerEventData.FramePressState.Released;
            return PointerEventData.FramePressState.NotChanged;
        }

Возиться с Android, если условие просто включает или отключает щелчок целиком (триггер и сенсорная панель). Что мне здесь не хватает? Как я могу разделить щелчок триггера и касание сенсорной панели?!

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Я тоже столкнулся с этой проблемой и решил ее, закомментировав часть OVRInputModule.GetGazeButtonState () следующим образом:

        virtual protected PointerEventData.FramePressState GetGazeButtonState()
        {
            var pressed = Input.GetKeyDown(gazeClickKey) || OVRInput.GetDown(joyPadClickButton);
            var released = Input.GetKeyUp(gazeClickKey) || OVRInput.GetUp(joyPadClickButton);

// ? Comment out or remove this block, because it causes touchpad touch events to register as click events.
// #if UNITY_ANDROID && !UNITY_EDITOR
//             // On Gear VR the mouse button events correspond to touch pad events. We only use these as gaze pointer clicks
//             // on Gear VR because on PC the mouse clicks are used for actual mouse pointer interactions.
//             pressed |= Input.GetMouseButtonDown(0);
//             released |= Input.GetMouseButtonUp(0);
// #endif

            if (pressed && released)
                return PointerEventData.FramePressState.PressedAndReleased;
            if (pressed)
                return PointerEventData.FramePressState.Pressed;
            if (released)
                return PointerEventData.FramePressState.Released;
            return PointerEventData.FramePressState.NotChanged;
        }
0 голосов
/ 12 июня 2019

Только что это выяснилось:

Ответ katbot - это одна из двух частей, которые нужно разделить. Триггерный щелчок с сенсорной панели. Щелчок.

Первый комментарий в OVRInput выглядит так:

       virtual protected PointerEventData.FramePressState GetGazeButtonState()
        {
            var pressed = Input.GetKeyDown(gazeClickKey) || OVRInput.GetDown(joyPadClickButton);
            var released = Input.GetKeyUp(gazeClickKey) || OVRInput.GetUp(joyPadClickButton);

// ? Comment out or remove this block, because it causes touchpad touch events to register as click events.
// #if UNITY_ANDROID && !UNITY_EDITOR
//             // On Gear VR the mouse button events correspond to touch pad events. We only use these as gaze pointer clicks
//             // on Gear VR because on PC the mouse clicks are used for actual mouse pointer interactions.
//             pressed |= Input.GetMouseButtonDown(0);
//             released |= Input.GetMouseButtonUp(0);
// #endif

            if (pressed && released)
                return PointerEventData.FramePressState.PressedAndReleased;
            if (pressed)
                return PointerEventData.FramePressState.Pressed;
            if (released)
                return PointerEventData.FramePressState.Released;
            return PointerEventData.FramePressState.NotChanged;
        }

Затем перейдите к вашему OVRInputModule в UnityEditor.Под «Joy Pad Click Button» теперь выберите «Первичный индексный триггер».Теперь вы убили щелчок пальцем по сенсорной панели, закомментировав материал Input.GetMouseButtonDown(0), который также убивает обычные триггерные клики.Но мы можем вернуть их обратно, связав их с «кнопкой нажатия Joy Pad» в Unity Editor.

...