간단한 3D 자동차 경주 게임 (특히 Outrun 2 / Motoracer와 같은 게임)에서 충돌이 어떻게 발생하는지 궁금했습니다.
복잡한 환경 (오픈 월드)이있는 고전적인 자동차 경주 게임에서는 비행기 충돌 (트랙, 건물 다른 건물)에 대한 기본 상자 (자동차 용)로 수행됩니다. 모든 것은 일부 경계 상자를 사용하여 최적화됩니다 (많은 게임에서 충돌이 수행되는 방식입니다).
Outrun 2 / Motoracer와 같은 게임에서 게임 플레이는 너무 간단하여 개발자가 필요하지 않을 수 있으며 모든 것이 단순화되었습니다. 그것을 연주하지 않는 사람들을 위해, 여기에 너무 구체적인 것이 있습니다 :
- 자동차 / 자전거는 항상 도로에 붙어 있습니다.
- 도로는 항상 같은 크기이며 매우 간단한 형태입니다.
- 유일한 가능성은 그 길을 따라 가거나 길을 떠날 수 없거나 다른 것과 충돌하는 것입니다 (다른 자동차 / 자전거는 제외하지만 우리는 신경 쓰지 않습니다).
- 도로와 충돌하면 매우 기본적인 아케이드 충돌이 발생합니다 (자동차는 단순히 도로에서 밀려납니다)
충돌이 발생했다고 생각하는 방법은 다음과 같습니다.
전체 트랙은 거대한 3D 베 지어 곡선으로 간주 될 수 있습니다. 이 곡선에서 도로 다각형을 생성 할 수있었습니다 (곡선에서 생성 된 앞, 왼쪽 및 위쪽 벡터 사용). 이 방법을 사용하여 다른 요소 (집, 나무 등)도 배치하고 정렬 할 수 있습니다.
그런 다음 충돌을 처리하고 자동차를 그립니다.
1) 현재 자동차 3D 위치에서 3D 곡선에서 가장 가까운 위치를 찾습니다. 즉, 3D 자동차 위치를 베 지어 곡선 위치로 변환합니다. 도로의 모든 3D 위치는 3D 곡선 ( t
) + 측면 변위 ( d
)를 따라 변위로 간주 될 수 있습니다 . 명확하지 않은 경우 아래 이미지를 확인하십시오 (2D 예이지만 3D에 쉽게 적용됨).
t = 0 차량이 트랙 섹션의 시작 부분에있을 때, t = 1 차량이 끝났을 때. d = -1 또는 1 대의 차량이 선로의 경계에있을 때, d = 0의 차량이 도로 중앙에있을 때
2)를 사용하여 도로에 자동차를 정렬 t
하고 d
(매우 간단한 : 모두에 대해 t
그리고 d
값 i가 3 차원 위치 + 업 / 전면 / 좌측 벡터를 얻을 수있다). 차는 이제 길에 붙어
3) d
자동차의 측면 변위 를 확인하십시오 . 값이 너무 크 (d > 1)
거나 낮은 (d < -1)
차에 도달하지 못한 경우 자동차를 올바른 위치에 놓기 위해 클립으로 고정하십시오.
이것은 또한 3d 컬링을 매우 간단하게 만듭니다 . 현재 자동차 t
위치 에서로 트랙을 그립니다 t + some_big_enough_value_to_avoid_visible_clipping
.
아니면 내가 완전히 틀렸을 수도 있습니다. 자동차 (경계 상자)와 트랙을 나타내는 매우 간단한 다각형 세트 (건물 등 제외)를 확인하는 것이 훨씬 빠르고 간단했을 것입니다. 3d 월드 (및 결과로 생성 된 colision 모델)는 일부 타사 툴 (게임을 실행할 때 더 이상 3d 곡선이 아니라 단지 많은 다각형)을 사용하여 이전에 생성되었을 것입니다.