- 개요
로비 레벨과 인게임 레벨을 전환화면서 레벨간에 SeamlessTravel이 이뤄질 수 있도록 구성한다
- 스크립트 작업
1) DSTypes 클래스

LobbyStatus 열거형 클래스를 추가하여 로비의 상태를 지정한다
- 대기 상태
- 카운트다운 상태
- Seamless Travel 상태
2) DS_GameModeBase 클래스


프로젝트에서 사용하는 GameMode의 조상 클래스에 TrySeamlessTravel 함수를 추가한다
해당 함수를 호출하여 이동할 레벨의 전체 패키지 경로를 가져와
에디터라면 OpenLevelBySoftObjectPtr 함수에 인자로 넘겨주고
에디터가 아니라면 ServerTravel 함수에 인자로 넘겨주어 레벨을 전환한다
3) DS_LobbyGameMode 클래스

로비에서 사용할 GameMode 클래스에 위와 같이 멤버함수와 멤버변수를 추가한다
멤버변수의 구성은 다음과 같다
- LobbyStatus 멤버변수 : 로비의 현재 상태
- MinPlayers 멤버변수 : 최소 플레이어의 수
- MapToTravelTo 멤버변수 : 로비에서 전환될 레벨
- LobbyCountdownTimer 멤버변수 : 로비에서의 시간을 측정할 타이머

생성자를 위와 같이 구성하여 추가한 멤버변수들의 값을 설정한다
또, bUseSeamlessTravel 멤버변수의 값을 True로 설정하여 SeamlessTravel이 이뤄지도록 설정한다

PostLogin 함수를 위와 같이 오버라이드한다
현재 플레이어의 수가 최소 플레이어의 수 이상이고, 현재 로비가 플레이어를 대기하는 상태라면
로비의 상태를 SeamlessTravel 상태로 변경하고 타이머를 작동시킨다

OnCountdownTimerFinished 함수의 로직은 위와 같다
타이머의 카운트다운이 끝나면 로비의 상태를 SeamlessTravel 상태로 변경하고
MapToTravelTo 멤버변수를 TrySeamlessTravel 함수에 인자로 넘겨주어 레벨을 전환한다

Logout 함수의 로직을 위와 같이 오버라이드하여 플레이어가 퇴장하면 CancleCountdown 함수를 호출한다

InitSeamlessTravelPlayer 함수의 로직을 위와 같이 오버라이드하여
기존 레벨의 플레이어의 데이터를 새로운 레벨의 플레이어로 안전하게 이전하고 초기화한다
이후 CancleCountdown 함수를 호출한다

CancelCountdown 함수의 로직을 위와 같이 구성한다
전체 플레이어의 수에서 퇴장할 플레이어를 미리 반영한 값이 최소 플레이어 이하면서 로비가 카운트다운 상태라면,
로비의 상태를 대기 상태로 변경하고, StopCountdownTimer 함수를 호출하여 타이머를 정리한다
4) DS_MatchGameMode 클래스

LobbyMap 멤버변수를 추가하여 인게임에서 전환할 로비의 레벨을 설정한다

OnCountdownTimerFinished 함수에 로직을 추가하여
진행중인 게임(매치)의 상태가 Post Match라면, 상태를 SemlessTravelling 상태로 변경하고 로비 레벨로 전환한다
- 블루프린트 작업
1) WBP_LobbyCountdownTimer 위젯 블루프린트

위와 같이 구성된 로비에서 사용할 타이머 위젯 블루프린트를 생성한다

Timer Type을 위와 같이 Lobby Countdown으로 설정하고
ShowCentiSeconds 값은 False로 설정하여 소수점을 표현하지 않도록 설정한다
2) WBP_LobbyOverlay 위젯 블루프린트

1)에서 생성한 타이머 위젯 블루프린트를 포함하는 로비전용 Overlay 위젯 블루프린트를 생성한다
3) BP_LobbyHUD 블루프린트

로비에서 사용할 HUD 블루프린트를 위와 같이 구성한다
BeginPlay 노드를 위와 같이 구성하여 PlayerController로부터 2)의 위젯을 생성하고 뷰포트에 추가한다
4) BP_LobbyGameMode 블루프린트

로비에서 사용할 GameMode의 블루프린트를 생성한다
PlayerController + HUD + Pawn에 대한 설정을 위와 같이 구성한다
또, 로비에서 전환할 레벨과 사용할 타이머의 타입, 카운트다운과 간격을 설정한다
5) BP_ShooterGameMode 블루프린트

인게임에서 전환할 로비의 레벨을 멤버변수로 추가한다
- Project Settings - Maps & Modes 설정

Transition Map과 Server Default Map을 위와 같이 설정한다
Transition Map은 한 레벨에서 다른 레벨로 전환할 때, 데이터가 로드되는 동안 임시로 머무는 중간 단계 레벨을 의미한다
Server Default Map은 서버가 구동될 때 가장 먼저 자동으로 로드하는 레벨을 의미한다

List of maps to include in a package build 옵션에 생성한 레벨들을 추가하여
패키징 파일에 생성한 레벨들을 추가하도록 설정한다
- 최종 실행 결과

'언리얼 엔진 - 게임 프로젝트 > AWS GameLift를 활용한 데디케이트 FPS 프로젝트' 카테고리의 다른 글
| 로비와 타이머 - 최종) 퇴장 버튼과 타이머 개선 (0) | 2026.07.10 |
|---|---|
| 로비와 타이머 - 6) 플레이어 입력 제한 (0) | 2026.07.09 |
| 로비와 타이머 - 4) 레벨 전환 및 서버 연결 상태에 따른 게임 데이터 보존과 관리 (0) | 2026.07.03 |
| 로비와 타이머 - 3) 매칭 게임 모드와 타이머 추가 (0) | 2026.07.02 |
| 로비와 타이머 - 2) 타이머 핸들 + PlayerController 클래스 추가 (0) | 2026.06.26 |