Последовательное столкновение?
|
|
FinalQ | Дата: Вторник, 11 Сентября 2018, 11:15 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Перехожу с GameMaker Studio на Unity и столкнулся с проблемой реализации столкновений. В гамаке: когда более двух красных кружков сталкиваются, обработка столкновений происходит последовательно, за каждого дают +1 к счету и оба объекта уничтожаются т.е. всего 4 очка должно быть на гифке ниже. В юнити: столкновения обрабатываются параллельно (что, наверное, более правильно, только как этот процесс контролировать?) т.е. каждый красный кружок сталкиваясь с соседними дает дополнительное очко к счету т.к. соприкасается с двумя и только потом уничтожается... т.е. 8 очков к счету.
К сожалению в реальном игровом процессе контролировать этот процесс невозможно и иногда к счету может добавиться как 2 так и 46 или 57 очков :-) Что можно сделать в данной ситуации?
Сообщение отредактировал FinalQ - Вторник, 11 Сентября 2018, 11:16 |
|
| |
DivES | Дата: Вторник, 11 Сентября 2018, 11:54 | Сообщение # 2 |
заслуженный участник
Сейчас нет на сайте
| FinalQ, выглядит так, как будто столкновение происходит друг с другом (красных шариков), а центральный шар они просто игнорируют. (Либо происходит столкновение центральных точек, а не спрайтов.) Если настроить так, чтобы начисление очков происходило только при столкновении с определённым объектом, то проблема решится ведь, нет?
|
|
| |
FinalQ | Дата: Вторник, 11 Сентября 2018, 13:57 | Сообщение # 3 |
был не раз
Сейчас нет на сайте
| Цитата DivES ( ) выглядит так, как будто столкновение происходит друг с другом (красных шариков), а центральный шар они просто игнорируют. Да, я специально отключил обработку столкновений с игроком для проверки столкновения врагов.
И вопрос с 8 вместо 4 решил так:
(При первом столкновении последующие столкновения с другими врагами блокируются)
А вот что делать, когда врагов нечетное количество, например 3? Я так сообразить и не смог. Нужно, чтобы уничтожались только два, а третий оставался...
|
|
| |
DivES | Дата: Вторник, 11 Сентября 2018, 14:48 | Сообщение # 4 |
заслуженный участник
Сейчас нет на сайте
| Цитата FinalQ ( ) А вот что делать, когда врагов нечетное количество, например 3? Я так сообразить и не смог. Нужно, чтобы уничтожались только два, а третий оставался... А почему третий оставаться должен? Они же все три одновременно участвуют в столкновении! Да и опять же, почему не сделать, чтобы только столкновения с игроком увеличивали очки?
Добавлено (11 Сентября 2018, 15:24) ---------------------------------------------
Цитата FinalQ ( ) Да, я специально отключил обработку столкновений с игроком для проверки столкновения врагов. Так и пускай сталкиваются, сколько хотят! Просто отключи инкрементирование для столкновений между врагами. А для игрока и врагов - оставь
Сообщение отредактировал DivES - Вторник, 11 Сентября 2018, 15:25 |
|
| |
FinalQ | Дата: Вторник, 11 Сентября 2018, 15:47 | Сообщение # 5 |
был не раз
Сейчас нет на сайте
| Цитата DivES ( ) А почему третий оставаться должен? Они же все три одновременно участвуют в столкновении! Так то да, но поведение в GMS было более последовательное, т.е. обрабатывалось сначала одно столкновение, враги удалялись, потом уже следующие (т.е. 3-ему нескем было сталкиваться :-)), в Unity столкновения реализованы более правильно, но хотелось бы воспроизвести оригинальный вариант уже готового геймплея :-) , а вот не выходит...
Цитата DivES ( ) Да и опять же, почему не сделать, чтобы только столкновения с игроком увеличивали очки? Наоборот, игрок должен убегать. При столкновении с игроком - конец игры. (Собственно это и отключил на время тестов) Набор очков происходит при взаимном столкновении врагов, а вот как убрать или искусственно изменить параллельную обработку столкновений...
Сообщение отредактировал FinalQ - Вторник, 11 Сентября 2018, 15:48 |
|
| |
pixeye | Дата: Вторник, 11 Сентября 2018, 18:34 | Сообщение # 6 |
Red Winter Software
Сейчас нет на сайте
| Ты можешь мне объяснить откуда ты вычитал про "параллельную обработку" столкновений? любые инструкции выполняются последовательно. Что в юнити что в ГМ Если у тебя сталкиваются два врага и на обоих есть триггер проверяющий что нужно добавить очки при столкновении друг с другом то они все логично делают.
Что можно сделать. 1) создаешь глобальный скрипт. Например ProcessingCollisions 2) добавляешь туда в список всех врагов 3) каждые пару кадров запускаешь вокруг каждого врага Physics2d.OverlapCircleNonAlloc какойнибудь 4) собираешь полученные коллайдеры от OverlapCircleNonAlloc - если там кто то есть то уничтожаешь себя и первого из списка попавшегося врага а всех остальбных игноришь. Очки начисляешь там же
если сложно то пиши) вечерком накатаю тебе скрипт))
ACTORS - мой фреймворк на Unity Until We Die - игра над которой работаю
Сообщение отредактировал pixeye - Вторник, 11 Сентября 2018, 18:41 |
|
| |
FinalQ | Дата: Вторник, 11 Сентября 2018, 22:44 | Сообщение # 7 |
был не раз
Сейчас нет на сайте
| pixeye, отлично, благодарю за наводку на Physics2d.OverlapCircleNonAlloc Буду завтра пробовать
Цитата pixeye ( ) Ты можешь мне объяснить откуда ты вычитал про "параллельную обработку" столкновений? Да нигде, поверхностно так выглядит разница в реализации, попытался более просто выразить что я имею ввиду
|
|
| |
ArtemS | Дата: Вторник, 18 Сентября 2018, 06:02 | Сообщение # 8 |
почетный гость
Сейчас нет на сайте
| FinalQ, отключи столкновение, и сделай скрипт который сканит в радиусе от врага пространство небольшое, и если в нем один или более, то удаляет себя и еще одного. а лучше это сделать отдельно, чтобы какой-то менеджер решал а не сами враги
хуяк, хуяк и в продакшн
|
|
| |