Выбор одного из многих gameObject, C#

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

При всем при этом, кубы тоже должны знать какая именно сфера следует за ними, то есть они должны образовать пару.

Как это сделать? Как выбрать из кучи совершенно одинаковых объектов, один единственный и, возможно, обмениваться с ним параметрами?

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

Unity3D

99 показов
369369 открытий
21 комментарий

Ну, вешаешь свои скрипты на куб и на сферу, у каждого указываешь булевой переменной занят ли он и тупо перебираешь все кубы.

Или создаёшь переменную GameObject, в которой null = объект без пары, и тупо перебираешь все кубы.

Или создаёшь тег "незанятые" и меняешь его у тех, которые заняты на, собственно, "заняты", пользуешься GameObject.FindGameobjectsWithTag и берёшь оттуда тупо первый.

Или создаёшь "контроллер", у которого есть пара list'ов, и который имеет доступ ко всем сферам и кубам — самый цивилизованный способ, про который я в курсе, но люди порой называют использование синглтрона "грязным паттерном".

Вариантов куча, в общем.

Ответить

синглтрон

Ответить

Синглтон называют антипаттерном, т.к. очень легко его тыкнуть там, где он не нужен. Кодеры, только узнавшие о нем, пихают его куда надо и не надо, из-за чего он и обрёл дурную славу.
При этом он есть незаменимым на серьезных проектах.

Ответить

Создать скрипт-менеджер, выдающий свободный куб.
На куб и сферу повесить ещё один скрипт, где будет иметься ссылка на объект, с которым они связаны.
Таким образом, менеджер должен выдавать любой из объектов, не имеющих ссылку на свою пару.
Понятное дело, на этапе инициализации менеджер должен себе записать все объекты обоих типов

Ответить

Чет прям вопросы на грани понимания основ что ли 🤔

Ответить

Автор тебе бы заголовок поменять. А то я подумал, что у тебя стоит выбор между разными версиями C#

Ответить