Добрый день!
Не работает коллизия если:
1. Объект маленький например пуля
2. Движется быстро например со скоростью свыше 3500 условных единиц.
3. Низкий FPS (если включены высокие настройки и FPS ниже 60)
Везде включил CCD у мешей в акторах.
По сообщениям эпиков на их форуме понял, что unreal пропускает коллизию если объект за кадр пролетает сквозь другой объект даже при включенной CCD. То есть объект уже переместили и как бы коллизии нет.
То есть unreal не гарантирует исполнение коллизий в принципе?
Или есть способ все таки рассчитать физику для небольших объектов?
Не очень понятно как правильно решить проблему:
Вижу такие варианты:
1. Увеличивать коллайдер самой пули в размере. Например сделать цилиндр длинный который точно попадет в кадр. Но получается коллайдер не соответствует по размерам как сам объект. То есть коллайдер в 10 раз длиннее пули получится.
2. Изменять настройки физики в проекте (solver). Но какие непонятно и помогут ли они точнее вычислять физику?
3. Снижать скорость движения объектов. Будет выглядеть нереалистично. Звук выстрела есть, а попадание происходит через секунду только.
4. Вместо hit и overlap событий делать raycast и самостоятельно рассчитывать попадания.
4 вариант думаю оптимальный, есть ещё вариант асинхронной физики, была настройка задающая частоту просчёт физики не помню с какой версии то ли с 5 то ли с 5.1
Но для столь быстрых объектов вряд ли хорошая идея.
Если на шаге, который предшествовал столкновению, расстояние было очень большим, то объекты не были в паре, для которой просчитывается пересечение.
Надо крутить настройки проекта. У каждого поля есть всплывающая подсказка. Ну и в документации должно быть описание, я ещё не смотрел.
Все делают рей каст
inc_ani
У каждого боеприпаса в полете?
Или в момент выстрела?
Я бы хотел чтобы расчет был по боеприпасу. То есть боеприс летит по любой траектории и при столкновении с противником наносится урон. Он может крутится в разные стороны. Или так нереально делать из-за самого физического движка в unreal?
Кидаешь луч от позиции пули в прошлом кадре до текущей позиции. Если есть коллизия, откидывании пулю до координаты пересечения луча
Hypnoise
> Кидаешь луч от позиции пули в прошлом кадре до текущей позиции.
А если пуля летит по дуге, т.е. по некой баллистической траектории ?
Дугу вроде можно просчитать заранее, но дуговых трейсов не существует
Интересная темка.
IGamedevStudio
а какая разница дуга или нет? трейс идет от А(предыдущий кадр) до Б(текущий кадр) расстояние небольшое.
я тоже так делал, но для стрел, и одиночных прожектайлов.
Есть возможность сделать трейс по баллистической траектории
https://docs.unrealengine.com/4.27/en-US/BlueprintAPI/Game/Predic… ByTraceChan-/
DuDuDuJ
> а какая разница дуга или нет? трейс идет от А(предыдущий кадр) до Б(текущий
> кадр) расстояние небольшое.
Разумное решение, позиции между кадрами все равно не известны и если нет задачи сбить одну пулю другой, то можно считать что целевой обьект не двигался с предыдущего кадра.
Конечно если хочется сбивать другие пули или попасть в глаз кролику бегущему со скоростью звука, то находим все обьекты которые попадают в зону поражения пули за кадр и дополнительно их симмулируем с большей частотой.
Тема в архиве.