플랫폼 및 물리
이러한 최첨단 사례는 많습니다. 좋은 재미있는 플랫 포머는 어떤 종류의 물리적으로 정확한 방식으로 행동하지 않으며, 마리오와 같은 수년간의 "완벽한"플랫 포머 이후에 플레이어가 기대하는 제어 및 행동은 Box2D 또는 다른 물리 엔진과 같은 일반적인 기술로는 구현하기가 매우 어렵습니다. 대부분의 훌륭한 플랫 포머는 플레이어 컨트롤러에서 일반적인 물리 또는 충돌 응답을 사용하지 않습니다.
선체 생성
특정 질문과 관련하여 가장 좋은 해결책은 상자를 사용자의 근거로 사용하지 않는 것입니다. 일련의 연결된 선분 (선체)을 사용하십시오. 이를 통해 충돌 감지 엔진은 실제로 걸을 수있는 표면에만 초점을 맞추고 AB와 BC 사이에 존재하는 "가짜"가장자리를 보지 않습니다. 이것이 실제로 Box2D가하는 일입니다. 모양은 바깥 쪽 표면을 생성하는 데 사용되며 서로 결합되어 선체를 형성합니다.
타일 기반 게임 또는 바닥 역할을하는 다른 옆에 두 개의 AABB 객체가있는 상황에서도이 기능이 필요합니다. 충돌 엔진이 수직 모서리를 집어 들고 플레이어가이를 잡습니다. 도움이 될 수 있지만 문제를 해결하지 못하는 해킹이 있습니다. 해결책은 완전한 2D 상자가 아닌 표면을 나타내는 단일 선 세그먼트를 갖는 것입니다.
다각형을 서로 자르고 클립 포인트를 가장자리 목록에 결합하여 일반적인 경우 선체를 생성 할 수 있습니다.
경 사진 표면
예제에 경사가 포함되어 있고 복원 및 기타 물리적 특성에 대해 언급하고 있기 때문에 곧 알아 차릴 몇 가지 다른 문제를 지적 할 것이며, 이는 일반적인 충돌 감지 및 응답이 플랫 포머에 적합하지 않은 이유를 추가로 설명합니다. 먼저, 각이 진 플랫폼에 서서 점프 한 다음 착륙하십시오. 착륙 할 때 캐릭터가 약간 미끄러질 수 있습니다. 문제는 생성하는 접촉 법선이 일반적으로 각진 표면에서 지적된다는 것입니다. 그런 다음 충돌을 해결할 때 플레이어가 해당 방향으로 밀립니다. 캐릭터가 똑바로 쓰러졌지만 착륙 할 때 위로 밀리고 오른쪽으로 조금 밀려 미끄러 져 나옵니다. 상대 속도를 고려하면 해킹 될 수 있습니다.
고치기 어려운 두 번째 문제는 경사로를 빠르게 내려 가려고 할 때 발생하는 문제입니다. 플레이어는 경사로 아래로 "홉"이동합니다. 이것은 오늘날 대부분의 AAA 게임에서도 볼 수 있습니다. 어리석은 것처럼 보일뿐만 아니라 게임에서 플레이어가지면에 발을 딛고 점프해야하는 경우 플레이어는 경사로의 작은 부분에서만 경사로에 닿기 때문에 경사로를 내리고 반쯤 아래로 점프하기가 어렵습니다. 그것을 내려가는 시간. 보다 간단한 수정 방법은 플레이어가 움직일 때 광선 캐스트를 단순히 수행하고 플레이어가 점프하지 않고 이전에 지상에 있었던 경우 플레이어 위치를 가장 가까운 표면 (아래로 플레이어와 매우 가까운 경우)에 맞추는 것입니다.
플레이어가 마치 일반 강체 인 것처럼 속도, 마찰 및 회복을 모델링하려고하면 경사로를 달릴 때 플레이어가 공중으로 발사되는 것을 발견 할 수도 있습니다. 넘어 지거나 점프하지 않는 한 플레이어의 움직임은 수평 움직임으로 제한되어야합니다. 물론, 오래된 황금 시대 플랫 포머를 플레이하는 경우 플레이어의 수평 속도가 수평 표면과 경사 표면 사이에서 일정하다는 것을 알 수 있습니다. 경사면을 오르 내릴 때도 고려해야합니다.
결국에는 다른 여러 모퉁이가 발생할 것입니다. 좋은 플랫 포머를 만들려는 경우 일반적인 물리학 및 충돌 응답 알고리즘에 의존하기보다는 물리학에서 분리 된 플랫 포머 플레이어 컨트롤러를 구현하고 원하는 움직임 및 제어 동작을 하드 코딩하는 것이 가장 좋습니다.