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 구현
'게임 개발 > [D2D_Portfolio] DirectX2D 포트폴리오 작업일지' 카테고리의 다른 글
46. Dungeon Reward 상호 작용 및 Bone Reward 구현 (0) | 2023.05.13 |
---|---|
45. Dungeon Reward 구현 (0) | 2023.05.12 |
43. Event Script를 저장할 수 있는 툴 개발 (0) | 2023.05.07 |
42. Dungeon Event 추가 및 툴을 이용한 Chapter3 기본 맵 생성 (0) | 2023.05.06 |
41. 던전 오브젝트를 맵 파일에 포함 (0) | 2023.05.04 |
댓글