Как сделать нормальную физику сталкивания игрока со стенами в unity?

Собственно проблема в том, что персонаж в одном кадре влезает в стену, потом просчитывается физика и его отпружинивает обратно. Пытался двигать и с помошью addforce, и изменяя velocity, и просто через transform.position, и в update и в fixedUpdate. Всё равно.

Сейчас сделал костыль. Пуская racast в право, и если расстояние до ближайшего коллайдера после изменения позиции игрока(до отрисовки) слишком маленькое, то есть игрок в стене, то двигаю игрока обратно к краю стены. Работает идеально. Но в реализации куча неприятностей. Основная проблема - лучей придётся пускать по несколько в каждую из 4 сторон. Это довольно запарно.

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


Ответы (2 шт):

Автор решения: Gleb Igorevich

Попробуйте делать это все в LateUpdate().

→ Ссылка
Автор решения: Andrew

Rigitbody -> Collision Detection -> Continuous

введите сюда описание изображения

→ Ссылка