본문 바로가기
게임 개발/[D2D_Portfolio] DirectX2D 포트폴리오 작업일지

44. Foothold Tile 충돌 처리 및 던전 베이스 캠프 맵 추가

by 헛둘이 2023. 5. 8.

Foothold Tile 충돌 처리

- 내가 게임에서 구현한 타일의 종류는 Wall, Foothold가 있다.

1. Wall : 플레이어와 겹쳐지지 않는 벽을 의미

2. Foothold : 발판 역할을 하는 타일을 의미한다.

(Wall 충돌은 앞서 PhysX에서 지원해주는 computePenetration 함수를 통해 구현한 바 있다)

- Wall 충돌은 정확히는 AABB 충돌을 물리엔진단에서 처리해주는 것이며, 반환해준 침범한 방향과 깊이를 통해 위치를 갱신해주는 식으로 구현했다.

- Wall 충돌의 경우 충돌한 모든 방향으로 밀어내는데 반해 Foothold 충돌에서는 플레이어가 위로 오면 위로 밀어내고, 그 외 방향(좌/우/하)로 접근하면 아무런 처리도 하지 않아야 한다.

- 이 기능을 구현하기 위해 현재 플레이어가 가만히 있거나 추락하고 있는지를 검사(Velocity.y < 0.1f)을 검사한 후,

다시 바닥에 레이를 쏴서, 바닥에 타일이 있는지 검사하는 식으로 간단히 구현했다.

- 그리고 플레이어와 타일의 사각 영역이 겹친 경우 이 또한 레이와 충돌해서 타일이 있다고 인식하게 되므로 플레이어의 머리에서부터 플레이어 크기 -5.f까지 레이를 쏴서 현재 겹쳐진 상태인지 같이 검사하게 했다.

 

던전 베이스 캠프 맵 추가

- 던전 베이스 캠프는 툴로부터 타일이나 배경 등을 받아오기도 하지만 또 프로그래머가 일반 던전에서 구현하기 힘든 디테일을 구현해야 하는 경우가 있으므로, 던전을 상속받는 별도의 클래스로 빼서 관리하도록 했다.

- 위에서 디테일이라고 언급한 부분은 라이트를 가진 물체들이나 NPC를 의미하는데, 이 또한 이후 툴을 통해 추가해줄 수 있지만 이번 주 수요일에 중간 평가 시연이 있기 때문에 구현할 수 있는 부분들에 더 시간을 투자하고 툴으로 넘길 부분들은 시간을 두고 차차 구현할 예정이다.

- 맵을 만들어본 결과 맵 하나에 100개가 넘는 타일이 들어가면서 프레임이 많이 떨어졌지만, 이 또한 Frustum Culling으로 커버하니 100~150프레임을 유지할 수 있었다.

- Frustum Culling에 버그가 있었는데, 버그의 원인은 컬링 시 평면을 만들 때 클립좌표로 평면을 만드는데에 있었다.

- 뷰행렬, 투영행렬의 역행렬을 이용해서 실제 좌표로 변환하는 과정을 거쳐야 하는데 역행렬이 아닌 쌩 뷰행렬, 투영행렬을 이용했던 게 원인이었다.

- 몇 번 디버깅을 해본 결과 뷰 역행렬이 카메라 좌표의 반대되는 위치을 가져와야 하는데 그냥 카메라 좌표를 가져오는 것을 보고 버그의 원인이 행렬이라는 것을 파악할 수 있었다.

 

내일 할 일

- 스테이지 몇 개분 작업 (중간평가 시연용)

- 던전 입장 UI 구현

 

댓글