Сейчас я нахожусь на грани психического срыва. Я часами создавал свою собственную лазерную указку, заставлял ее стрелять лучами по всему и пытался заставить ее работать с моим пользовательским интерфейсом. Но этого не будет. По крайней мере не правильно.
Что работает: 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;
}
}
@ILiveForVR Я прокомментировал ваш ответ - проясняет ли это проблему / мое замешательство?





Без кода трудно сказать, но я думаю, что вы переопределяете события щелчка указателя своими собственными? Это объясняет, почему анимация исчезла.
Вы можете решить эту проблему, вызвав событие в базовом классе.
base.OnPointerClick() или что-то в этом роде.
Я добавил свой код выше. Виноват! Я не понимаю, как триггер события кнопок может срабатывать на pointerEnter, но не реагирует на pointerClick. Принимая во внимание, что куб ясно понимает события pointerClick, но убирает анимацию (я думаю, тогда взаимодействие с кнопками исчезло)
Просто добавил событие в каждый случай. Компонент триггера события кнопки реагирует на все, кроме pointerClick. Что для меня неприлично! Поскольку триггер события куба четко различает PointerUp и pointerClick.
Где вы устанавливаете pointerPress во второй части вашего кода? Вы проверяете его, но я не вижу, где он установлен. Это одна вещь, которая отличается от вашего первого фрагмента кода, где вы устанавливаете pointerEnter
pointerPress не имеет pointerPressHandler в ExecuteEvents-системе. Поэтому вместо этого я использую pointerClickHandler. (если мы нажали и отпустили один и тот же объект, то мы нажали на него (OnPointerClick))
Ах, так второй кусок кода для объекта? И первый это ваш указатель? Потому что вы установили eventData.pointerEnter = rayHit.transform.gameObject;, но я не вижу, где вы установили «eventData.pointerPress» для части «иначе, если» вашего кода. Вы установили его в первом if, но оно никогда не достигнет else if, верно?
Это одна часть. У меня всего два модуля для функции обновления для лучшего понимания для всех, кто пользуется этим после меня :) Он один (отредактированный выше). Имо, pointerPress достигает состояния else if, так как мы сбрасываем его на ноль только после того, как мы снова получили StateUp триггера
Если это не так, то я понятия не имею, почему это не работает. Не могли бы вы проверить с точкой останова?
Хороший звонок! Посмотрите, что у меня получилось: для взаимодействия с кнопкой: Press: Button (5) (UnityEngine.GameObject) Enter: Cube (1) (UnityEngine.GameObject) . Для триггера события на кубе: Press: Cube (1) (UnityEngine.GameObject) Enter: Cube (1) (UnityEngine.GameObject) ... как это исправить? Если мы не проверим это, кнопка все равно сработает, даже если я нажму ее, вытащу указатель и затем отпущу триггер.
Спасибо за добавление кода, все еще трудно понять, что происходит. Какая часть кода не делает то, что вы хотите?