Работайте с панорамированием, масштабированием и щелчком мышью / касанием на Unity3D - PullRequest
0 голосов
/ 21 мая 2018

Я работаю над двумерной пошаговой игрой и могу управлять мышью и касанием.

Игра имеет гексагональную карту и требует действия панорамирования, масштабирования и щелчка.

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

Пример: MapCell.OnMouseUpAsButton() звонки delegate.OnCellClick(MapCell)

Все работает хорошо, и таким образом я могу обработать , когда делает что-то .

Проблемы возникли, когда я начал использовать Zoom и Pan на карте.Для этих двух действий мне пришлось избегать классического метода Monobehaviour ( OnMouseDown , OnMouseUpAsButton , ...) и использовать LateUpdate .

Итак,Я создал CameraHandler , который в LateUpdate использует:

  • HandleMouse ()
  • HandleTouch()

и, используя шаблон делегата, вызывает следующие действия:

  • OnMapWillPan ()
  • OnMapPan ()
  • OnMapEnd ()

Чтобы избежать панорамирования или кликов по элементам пользовательского интерфейса, TurnManager фильтрует полученные события с EventSystem.current.IsPointerOverGameObject()

Задача На Mac / Mouse все отлично работает!: DНа смартфоне / Touch не могу ничего нажать, работает только Pan.Отладка на устройстве адская из-за отсутствия точки останова или консоли.

Вопросы

  • Вы когда-нибудь обращались с этим?Как?
  • Какой подход вы использовали?
  • Как вы думаете, что я делаю не так?
  • Существуют ли передовые практики, позволяющие избежать подобных проблем и правильно обрабатывать кроссплатформенный ввод?
  • Есть ли хорошая лекция / книга для этого аргумента?

PS: при необходимости я могу показать код

...