Я работаю над 3D-плиткой, и я использую обнаружение столкновений AABB. Для каждого куба, который игрок пересекает, я нахожу ось, по которой игрок меньше всего пересекает куб, и выталкивает игрока из куба вдоль этой оси.Скользящее столкновение AABB - застревание на краях
В зависимости от того, что кубы проверены, это может вызвать проблемы при скольжении по краю нескольких кубиков. Я создал диаграмму, которая должна объяснить проблему:
- Arrow # 1 является попытка движения игрока. Другие стрелки - это реакция столкновения.
- На левой диаграмме столкновение сначала проверяется на правый куб, заставляя игрока перемещаться влево, а затем вверх. (bad)
- На правой диаграмме столкновение сначала проверяется против левого куба, заставляя игрока выдвигаться вверх, после чего игрок больше не пересекает другой куб. (хорошо)
Любые идеи о том, что наиболее эффективный способ решения этой проблемы может быть? Или любые лучшие способы обработки реакции столкновения?
спасибо.
Может проверить все столкновения и обратите внимание на время (или расстояние) столкновения. Примените только столкновение, которое произойдет быстрее всего. По желанию продолжить процесс на оставшуюся часть временного шага. –
Итак, если бы я отсортировал все кубы, которые игрок пересекал на расстоянии от игрока, а затем рассмотрел один за раз, это может сработать. Я думаю, было бы лучше избегать необходимости сортировать вещи в каждом фрейме, но я не уверен, что это будет иметь большое значение, поскольку игрок может столкнуться только с результатом до 7? блоков за один раз. Как вы думаете, есть ли что-то, что можно было бы там беспокоить? – Jeff