2D 타일 기반 RTS를 작성하고 있습니다. 그리고 강 위의 다리 인 '의사 3D'기능을 추가하고 싶습니다.
아직 코딩을 시작하지 않았으며 충돌 감지 모델에 어떻게 적합한 지 생각하려고했습니다. 다리 아래를 지나가는 보트와 다리 위로 움직이는 유닛은 결국지도에서 같은 셀을 차지하게됩니다. 충돌을 방지하는 방법은 무엇입니까?
그러한 문제를 해결하기위한 일반적인 접근 방법이 있습니까? 아니면 이것을하기 위해 3D 세계를 구현해야합니까?
2D 타일 기반 RTS를 작성하고 있습니다. 그리고 강 위의 다리 인 '의사 3D'기능을 추가하고 싶습니다.
아직 코딩을 시작하지 않았으며 충돌 감지 모델에 어떻게 적합한 지 생각하려고했습니다. 다리 아래를 지나가는 보트와 다리 위로 움직이는 유닛은 결국지도에서 같은 셀을 차지하게됩니다. 충돌을 방지하는 방법은 무엇입니까?
그러한 문제를 해결하기위한 일반적인 접근 방법이 있습니까? 아니면 이것을하기 위해 3D 세계를 구현해야합니까?
답변:
가장 간단한 경우에는 "지상 / 교량"과 "물 / 교량"이라는 두 가지 값으로 만 구성 할 수 있지만 기본적으로 3 차원을 작성해야합니다.
Advanced Strategic Command 가 수행 하는 방식에서 영감을 얻을 수 있습니다 . 유닛은 특정 높이 레벨을 차지하며, 달리 할 수있는 특정 기능 (예 : 항공기 활주로)이없는 한 해당 유형에 맞는 높이 레벨에서만 움직일 수 있습니다. 일반적으로 변경 약간의 레벨 또는 다른 것에 대한 벌점과 함께 이동 포인트를 요합니다. 각 타일의 높이가 다른 한 타일은 원하는 개수만큼 사용할 수 있습니다.
ASC의 경우 레벨은 다음과 같습니다.
레벨을 지정하는 각 타일에 간단한 속성을 추가 할 수 있습니다.
예를 들어 :
tileA.layer = 0 // Will be at the bottom
tileB.layer = 1 // Will be above level 0, on top of it.
// Add tiles to layered list
List<List<Tile>> tiles = new List<List<Tile>>();
tiles[0].add(tileA);
tiles[1].add(tileB);
// Draw 'em in the right order!
void Draw(List<List<Tile>> tiles) {
foreach( var listOfTiles in tiles ) {
foreach( var tile in listOfTiles ) {
tile.draw();
}
}
이제 레이어 값에 따라 타일을 정렬하고 아래쪽-> 위쪽으로 그릴 수 있습니다! 이렇게하면 게임에서 특정 깊이가있는 것처럼 보입니다. 대부분의 타일 엔진이이를 지원합니다. 추가 할 수있는 또 다른 멋진 점은 텍스처의 투명도이므로 맨 아래 레이어를 통해 볼 수 있습니다.
예를 들어 물로 수행 할 수 있습니다. lvl 1의 물과 lvl 0의 해저를 상상해보십시오. 물 질감이 다소 투명한 경우 위에서 바다의 바닥을 볼 수 있습니다.