Страница 1 из 1

Grid+Tilemap + mouse events

СообщениеДобавлено: 15 авг 2018, 15:43
Johnson
Привет, уважаемые!

Есть 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]

Re: Grid+Tilemap + mouse events

СообщениеДобавлено: 17 авг 2018, 18:14
Johnson
Достаточно было бросить BoxCollier2D на сетку или тайлмап. Не забыть отрегулировать размер коллайдера под размер поля и дать ему IsTrigger, если не нужно отталкивание других коллайдеров.

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

Получение позиции клетки под мышью выше.