👤 김여울 (UI)
⚠️ 문제
- 캐릭터 사망 시 자동으로 게임 오버 화면이 나타나고, 마우스 커서 활성화 + 게임 일시 정지 후 버튼 클릭 시 MainMenuLevel로 복귀하는 기능을 구현하려 했음
- 처음에는 캐릭터 → 플레이어 컨트롤러(게임오버 위젯 띄우기) 사이에서만 델리게이트를 연결하려 했으나, 제대로 동작하지 않음
- 게임모드가 게임의 규칙/흐름을 총괄하는 "심판" 역할을 하므로, 캐릭터 → 게임모드 → 컨트롤러 순으로 연결해야 한다는 점을 간과함
🔍 원인
- 게임모드의 역할
- 게임모드는 게임의 전체 흐름과 승패 조건을 관리하는 중요한 역할을 하므로, 게임의 승패 판단과 관련된 로직은 게임모드에서 처리해야 했음
- 캐릭터 사망 후 게임 오버 처리를 게임모드에서 수행하도록 해야 했음
- 플레이어 컨트롤러는 UI 표시와 관련된 작업을 주로 담당하지만, 게임의 규칙을 처리하는 권한이 없음
- 게임 오버 화면을 띄우는 것은 컨트롤러가 처리하지만, 언제 띄울지는 게임모드에서 결정해야 했음
- 잘못된 델리게이트 연결
- 캐릭터에서 컨트롤러로 직접 델리게이트를 연결하려 했으나, 게임모드를 거쳐서 연결해야 하는 구조를 놓친 것임
🚧 조치
- 게임모드에서 게임 오버 처리
- 게임모드에서 플레이어 사망 시 델리게이트를 수신하여 게임 오버를 처리하도록 수정
- 캐릭터의 사망 처리는 게임모드에서 결정되고, 게임 오버는 게임모드에서 호출하도록 변경
- 게임 오버 화면 표시
- 게임모드에서 게임 오버를 결정한 후, 이를 플레이어 컨트롤러에 알려 게임 오버 화면을 띄우도록 구현
- 컨트롤러에서 UI를 표시하지만, 언제 표시할지는 게임모드에서 처리
- 게임모드 → 컨트롤러 → UI 연결
- 게임모드에서 플레이어 사망 시
OnGameOver()
를 호출하고, 이를 플레이어 컨트롤러가 GameOverLevel을 연결해 GameOverWidget을 처리하도록 연결
- UI 버튼 클릭 시 MainMenuLevel로 이동하도록
UGameplayStatics::OpenLevel()
호출
💡 결과
- 게임모드에서 플레이어 사망을 감지하고, 게임 오버 화면을 플레이어 컨트롤러로 전달하여 UI가 정상적으로 표시됨
- 게임 흐름을 게임모드에서 처리하므로 게임 규칙을 우회할 수 없게 되며, 재사용성과 유지보수성이 향상됨
- 게임 오버 화면이 정상적으로 나타나고, MainMenuLevel로 복귀하는 기능도 완벽하게 동작함