더 많은 충돌을 일으키지 않고 충돌하는 객체를 분리하는 방법


11

모든 객체를 이동 한 다음 충돌을 확인하는 간단한 이산 충돌 탐지 시스템을 사용한다고 가정합니다. 충돌하는 객체를 (물론) 분리하고 적절한 응답 속도 (바운스, 슬라이드, 정지 등)를 할당하고 싶습니다.

충돌하는 오브젝트 쌍이있을 때 다른 오브젝트와 충돌하는 하나 또는 둘 다로 끝나지 않고 어떻게 분리합니까?

답변:


8

이것은 일반적으로 해결하기 쉬운 문제가 아닙니다. 물리 엔진에서는 금기 솔버가 처리합니다. 구속 조건 솔버에는 여러 가지 유형이 있지만 이해하기 가장 쉬운 방법 중 하나는 순차 임펄스 솔버입니다.

Erin Catto는 여러 이전 GDC에서 순차 임펄스 솔버에 대한 훌륭한 설명을 제공했으며 Box2D 다운로드 페이지 에서 다운로드 할 수 있습니다 ( 예 : GDC 2009 참조).


나는 이것에 대해 궁금하다. 충돌 감지 및 해상도에 대한 요구가 얼마나 일반적인지 감안할 때 아케이드 및 액션 게임에 적합한 단순한 해상도 알고리즘이 있다고 가정했습니다.
AJM

2
실제로는 아닙니다. 예전에는 (SNES 등) 게임 디자인 변경이나 타협으로 이와 같은 문제가 발생했습니다. 예 : 슈퍼 마리오에서는 플레이어가 맞았을 때 마리오가 몇 초 동안 무적 상태가되어 두 번째 충돌을 우회했습니다. Double Dragon에서는 뒤로 떨어지는 애니메이션이 끝날 때까지 플레이어의 충돌이 무시됩니다.
yaustar

@yaustar 사실 마리오는 적과 전혀 충돌하지 않습니다. 히트 박스가 겹치면 손상됩니다.
Winter

3

이를 방지 할 수있는 유일한 방법은 처음부터 침투를 방지하는 것입니다. 객체를 이동하기 전에 합법적 인 이동인지 확인하십시오. 이것은 두 객체가 서로 움직이는 경우를 피하기 위해 한 번에 하나씩 객체를 이동해야 함을 의미합니다.

관통이 발생하지 않으면 위치를 재설정 할 필요가 없으므로 2 차 관통이 트리거되지 않습니다.


2

내가 일반적으로하는 일은 다음과 같습니다.

객체를 분리하고 더 많은 충돌이 발생하면 최대 단계 수에 도달하거나 객체가 사전 정의 된 임계 값 미만으로 침투 할 때까지 다시 반복합니다.


매우 불안정합니다. 플레이어가 가벼운 물체를 밀어 엉망으로 만들 때마다 게임의 FPS가 급상승 할 수 있습니다. 다음 프레임에서 해결하는 것이 좋습니다.
Winter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.