Войти
ПрограммированиеФорумФизика

Реакция на столкновение

#0
18:22, 23 июня 2019

Здравствуйте. Вопрос от нуба который использует unity и пытается попробовать что-то новое. Ситуация: два круга движутся по оси X на встречу друг другу со скоростью 2м/с каждый.Радиусы кругов R1=0.5м R2=0.5м. Столкновение определяю как дистанция между центрами объектов и если меньше 1м то произошло столкновение.Происходит телепорт объектов в обратную сторону на дистанцию : глубину проникновения/2.
Вопрос вот чём собсно, скорость не сбрасываю и в итоге после столкновения происходит дребезжание из-за того что после первого столкновения последующие столкновения происходят далее 50 раз в секунду. Как подобное решается прямыми руками? Взять тот же physix в юнити, где в подобной ситуации объекты упрутся в друг друга и таких проблем не будет.


#1
21:40, 23 июня 2019

Sh0vel
> Происходит телепорт объектов в обратную сторону на дистанцию : глубину
> проникновения/2.
либо отскок убери
> скорость не сбрасываю
либо скорость гаси.

+ Показать
#2
22:04, 23 июня 2019

Aroch
> либо отскок убери
> либо скорость гаси.
Это не отскок.Телепорт происходит на дистанцию проникновения в другой объект.
Если скорость в 0 ставить то конечно всё будет как надо, но не ясно как потом по новой разрешать движение.На ум приходит рейкасты использовать дополнительно.

Занялся велосипедом из-за того что в юнити стандартная физика(physx) не позволяет отлавливать столкновения без воздействия сил на другие объекты. Объект А врезается в не подвижный объект Б и объект Б отлетит от удара.

#3
0:23, 24 июня 2019

Sh0vel
> Объект А врезается в не подвижный объект Б и объект Б отлетит от удара.
измени ему массу или заморозь.
> но не ясно как потом по новой разрешать движение.
снова изменить скорость?

#4
0:57, 24 июня 2019

Aroch
> измени ему массу или заморозь.
Всё перепробовать уже вроде успел.В такой ситуации(А врезается в неподвижный Б) конечно изменение массы,заморозка, да и трение поможет, но только в случае если объектов не более двух и один из них неподвижен.А что если задача усложняется?Одновременно два столкновения.А в Б, В в А.
абв | Реакция на столкновение
При этом информация о столкновениях в юнити предоставляется уже после просчёта первой итерации с момента столкновения.По этому заморозка сработает только после того как все объекты уже будут подвержены силам за 0.02сек.А крутить массу или трение становится похоже на большой костыль и чем больше одновременных столкновений тем больше крутить.В данном же случае масса Б должна быть значительно больше чем масса А,а масса А значительно больше чем масса В.Эт кошмар.И опять же,за время после столкновения и до коллбэка о столкновении где можно будет что-то менять, на тело уже повлияют силы от удара.

> снова изменить скорость?
ну да.Должно же быть условие при котором можно будет продолжить движение дальше.К примеру в играх игрок упирается в дверь которая через время откроется.Если он удерживал зажатую кнопку перемещения и упирался в дверь то дребезжания нет(как в моём примере), и при этом как только дверь откроется, и можно будет пройти - игрок продолжает движение.

#5
5:19, 24 июня 2019

Sh0vel
http://www.gamedev.ru/code/articles/PositionBasedPhysics

#6
20:17, 23 авг. 2019

Sh0vel
> Одновременно два столкновения.А в Б, В в А.
А в чем проблема? Просто поочередно примени силу к каждому объекту.

ПрограммированиеФорумФизика