Воскресенье, 22 Декабря 2024, 23:25

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Последовательное столкновение?
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, отключи столкновение, и сделай скрипт который сканит в радиусе от врага пространство небольшое, и если в нем один или более, то удаляет себя и еще одного. а лучше это сделать отдельно, чтобы какой-то менеджер решал а не сами враги

хуяк, хуяк и в продакшн
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг