Grid+Tilemap + mouse events

Программирование на Юнити.

Grid+Tilemap + mouse events

Сообщение Johnson 15 авг 2018, 15:43

Привет, уважаемые!

Есть Grid, в дочках у которого несколько Tilemap (я так понял, появилась эта механика совсем недавно). На гриде болтается скрипт, по задумкам на сами тайлмапы скрипты вешать не хочется.
Требуется определять события мыши на конкретном тайлмапе или гриде в целом (второе предпочтительнее).

С наскока пытался бросить коллайдер на тайлмапы и использовать хендлеры вроде IPointerEnterHandler, но обломался - не свистит. Ни со скриптом на самом тайлмапе, ни на гриде.
Пробовал бросить рей вместо хендлеров - аналогично...
Единственное что вышло - в апдейте просто определять ячейку под курсором если мыши нажата... Фигня, не подходит, хочется именно какую-никакую событийную модель.

Синтаксис:
Используется csharp
        void Update() {
                Vector3 camWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                var cellPosition = grid.WorldToCell(camWorldPosition);
                guiLayerMap.ClearAllTiles();
                guiLayerMap.SetTile(cellPosition, hoverTile);
                /// TODO научиться кликать нормально
                if (Input.GetMouseButton(0)) {
                        baseLayerMap.SetTile(cellPosition, tile);
                }
}


Подскажите, как это реализовать? [curved_hands]
Johnson появился в результате деления на null. Кривокодер-рецидивист. Кусается.
Хорошо, что в больнице хирурги не такие же, как новички на этом форуме. Пришел вытащить гвоздь из руки, а они яйца оттяпали...
ProgrammerNotFoundException on line 0!
Аватара пользователя
Johnson
UNIверсал
 
Сообщения: 447
Зарегистрирован: 09 июн 2013, 16:31
Откуда: Пермь
Skype: Johnson1893
  • Сайт
  • ICQ

Re: Grid+Tilemap + mouse events

Сообщение Johnson 17 авг 2018, 18:14

Достаточно было бросить BoxCollier2D на сетку или тайлмап. Не забыть отрегулировать размер коллайдера под размер поля и дать ему IsTrigger, если не нужно отталкивание других коллайдеров.

Так же можно бросить Tilemap Collider 2D на тайлмап, однако, он работает только на заполненных клетках именно этого тайлмапа, скрипт при этом должен быть на тайлмапе. Если есть тайлмап слоя земли, который никогда не бывает пустым - можно использовать и его. Плюс этого способа - не надо подстраивать размер бокса под поле, чтобы не обрабатывать клики за пределами поля. Плюс сомнительный, полностью гасится минусом необходимости использовать скрипт на тайлмапе, не подходит для глобального контроллера.

Получение позиции клетки под мышью выше.
Johnson появился в результате деления на null. Кривокодер-рецидивист. Кусается.
Хорошо, что в больнице хирурги не такие же, как новички на этом форуме. Пришел вытащить гвоздь из руки, а они яйца оттяпали...
ProgrammerNotFoundException on line 0!
Аватара пользователя
Johnson
UNIверсал
 
Сообщения: 447
Зарегистрирован: 09 июн 2013, 16:31
Откуда: Пермь
Skype: Johnson1893
  • Сайт
  • ICQ


Вернуться в Скрипты

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 6