Взаимодействие пользовательского интерфейса контроллера Unity VR

Сейчас я нахожусь на грани психического срыва. Я часами создавал свою собственную лазерную указку, заставлял ее стрелять лучами по всему и пытался заставить ее работать с моим пользовательским интерфейсом. Но этого не будет. По крайней мере не правильно.

Что работает: Raycast и рисование линий.

Где я борюсь: прямо сейчас у меня есть два варианта. A) Стандартная кнопка пользовательского интерфейса и куб без рендеринга сетки. Это заставляет кнопку исчезать через ее анимацию в соответствии со сценарием кнопки. НО это не разрешит события нажатия кнопки! Поэтому я добавил к кнопке триггер события, который... действительно вызовет события "ввод указателя"! Но не его события «щелчка указателя» :(

Так что я подумал: мой клик должен быть реализован неправильно! Чтобы проверить это: Б) В куб добавлен триггер события, это коллайдер кнопок. Установите его на «щелчок указателя». И тада! оно работает! БУУУУТ это убивает анимацию кнопки! Почему?

Благодарен за любые идеи! Я бы также принял во внимание новые стартовые точки, если у вас есть хороший намек!

Следующая проблема — слайдеры. Любые советы о том, как заставить их работать?

Спасибо за любую помощь!!

Ваше здоровье Фло

Обновлено: текущий код:

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

Спасибо за добавление кода, все еще трудно понять, что происходит. Какая часть кода не делает то, что вы хотите?

HoloLady 27.02.2019 09:25

@ILiveForVR Я ​​прокомментировал ваш ответ - проясняет ли это проблему / мое замешательство?

Flo 27.02.2019 09:27
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
979
1

Ответы 1

Без кода трудно сказать, но я думаю, что вы переопределяете события щелчка указателя своими собственными? Это объясняет, почему анимация исчезла. Вы можете решить эту проблему, вызвав событие в базовом классе. base.OnPointerClick() или что-то в этом роде.

Я добавил свой код выше. Виноват! Я не понимаю, как триггер события кнопок может срабатывать на pointerEnter, но не реагирует на pointerClick. Принимая во внимание, что куб ясно понимает события pointerClick, но убирает анимацию (я думаю, тогда взаимодействие с кнопками исчезло)

Flo 27.02.2019 09:26

Просто добавил событие в каждый случай. Компонент триггера события кнопки реагирует на все, кроме pointerClick. Что для меня неприлично! Поскольку триггер события куба четко различает PointerUp и pointerClick.

Flo 27.02.2019 09:33

Где вы устанавливаете pointerPress во второй части вашего кода? Вы проверяете его, но я не вижу, где он установлен. Это одна вещь, которая отличается от вашего первого фрагмента кода, где вы устанавливаете pointerEnter

HoloLady 27.02.2019 09:34
pointerPress не имеет pointerPressHandler в ExecuteEvents-системе. Поэтому вместо этого я использую pointerClickHandler. (если мы нажали и отпустили один и тот же объект, то мы нажали на него (OnPointerClick))
Flo 27.02.2019 09:39

Ах, так второй кусок кода для объекта? И первый это ваш указатель? Потому что вы установили eventData.pointerEnter = rayHit.transform.gameObject;, но я не вижу, где вы установили «eventData.pointerPress» для части «иначе, если» вашего кода. Вы установили его в первом if, но оно никогда не достигнет else if, верно?

HoloLady 27.02.2019 09:52

Это одна часть. У меня всего два модуля для функции обновления для лучшего понимания для всех, кто пользуется этим после меня :) Он один (отредактированный выше). Имо, pointerPress достигает состояния else if, так как мы сбрасываем его на ноль только после того, как мы снова получили StateUp триггера

Flo 27.02.2019 09:59

Если это не так, то я понятия не имею, почему это не работает. Не могли бы вы проверить с точкой останова?

HoloLady 27.02.2019 10:01

Хороший звонок! Посмотрите, что у меня получилось: для взаимодействия с кнопкой: Press: Button (5) (UnityEngine.GameObject) Enter: Cube (1) (UnityEngine.GameObject) . Для триггера события на кубе: Press: Cube (1) (UnityEngine.GameObject) Enter: Cube (1) (UnityEngine.GameObject) ... как это исправить? Если мы не проверим это, кнопка все равно сработает, даже если я нажму ее, вытащу указатель и затем отпущу триггер.

Flo 27.02.2019 10:17

Другие вопросы по теме