[Архитектура] Как отслеживать перемещение объектов в сетке

Общие вопросы о Unity3D

[Архитектура] Как отслеживать перемещение объектов в сетке

Сообщение Od1Um 17 окт 2022, 17:15

Приветствую!

Есть сетка (grid).
Есть физические объекты, которые перемещаются по сетке.
Задача - зная объект найти ячейку сетки, в которой находится объект и наоборот, зная ячейку найти объект.

Как оптимальнее это сделать?

Вижу несколько вариантов:
1. В ячейке есть ссылка на объект, в объекте ссылка на ячейку. Мне не нравится такая зависимость и я не очень понимаю кто должен управлять значениями при перемещении объектов.
2. Ячейка знает об объекте, объект не знает о ячейке. Находим ячейку преобразуя положения объекта в пространстве к координатам сетки.
3. Сетка и объект не знают друг о друге. Есть некий отдельный объект, в котором есть список соответствия ячейка-объект. Например, Dictionary. Управление происходит через этот объект.

Подскажите какой вариант лучше и почему? Может есть альтернативные решения?
Od1Um
UNец
 
Сообщения: 41
Зарегистрирован: 22 мар 2017, 17:54

Re: [Архитектура] Как отслеживать перемещение объектов в сетке

Сообщение 1max1 17 окт 2022, 18:29

Ссылка на сетку, в ней метод в который передаешь позицию чего угодно и получаешь ячейку.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: [Архитектура] Как отслеживать перемещение объектов в сетке

Сообщение Od1Um 17 окт 2022, 18:38

Хорошо, это поможет определить ячейку по координате объекта.
А обратно? Если у меня есть ячейка, то как получить объект? Прямая ссылка на объект в ячейке?

И кто тогда должен актуализировать запись в этой ячейке, при перемещении объекта?
Скажем, объекту поступило указание от контроллера передвинуться из координаты 1,1,1 в координату 1,5,1. Он не знает ничего про ячейки сетки. Сетка не знает о его перемещении.

Вижу такие варианты:
1. Контроллер, который сказал объекту двигаться, должен найти его ячейку и удалить ссылку на объект, а также найти будущую ячейку и записать ей объект. Как то не очень красиво.
2. События. Ячейка подписывается на событие перемещения объекта и сама удаляет его, если объект перемещается. Но не понятно, как прописывать его в целевой ячейке.
3. Управлять объектом не через отдельный контроллер, а через ячейку. Т.е. хотим передвинуть объект - находим его ячейку и ей данм команду передвинуть объект. Она сама его уже выписывает и записывает. Но тоже как то криво))
Od1Um
UNец
 
Сообщения: 41
Зарегистрирован: 22 мар 2017, 17:54

Re: [Архитектура] Как отслеживать перемещение объектов в сетке

Сообщение 1max1 17 окт 2022, 18:49

Конечно в ячейку можно пихнуть ссылку на все объекты, которые в ней находятся, но проще всего, если объекты имеют коллайдер и определенный тег (что это не объект дизайна), то можно кинуть оверлеп по координате ячейки https://docs.unity3d.com/ScriptReferenc ... apBox.html (для 2д есть аналог).
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: [Архитектура] Как отслеживать перемещение объектов в сетке

Сообщение Od1Um 20 окт 2022, 18:59

Большое спасибо!

Пойду реализовывать.
Od1Um
UNец
 
Сообщения: 41
Зарегистрирован: 22 мар 2017, 17:54


Вернуться в Общие вопросы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15