Unreal Engine 5 C++ Multiplayer Shooter
Non-Seamless Travel
클라이언트는 레벨을 이동할 때, 연결이 끊어졌다가 다시 같은 서버에 연결된다.
연결이 끊겼다가 재연결되기 때문에, 서버 연결 문제나 최대 인원 수 초과 등으로 인해 재연결이 불가능할 수도 있다.
레벨을 처음 로드할 때 발생한다.
서버에 처음 연결할 때 발생한다.
멀티 플레이어 매치가 끝난 후 새로운 게임이 시작할 때 발생한다.
Seamles Travel
레벨을 이동할 때 연결이 끊기지 않으므로 유저에게 매끄러운 경험을 제공할 수 있다.
재연결과 관련된 문제를 피할 수 있다.
사용하기 위해서는 Transition 레벨이 필요하다.
많은 메모리를 차지하는 레벨에 있을 때 그 레벨에 있는 상태에서 또 큰 레벨을 로드하면 부하가 크기 때문에, 적은 메모리를 차지하는 Transition 레벨로 이동하고 기존 레벨을 해제시킨 후 새로운 레벨을 로드한다.
UWorld::ServerTravel()
서버가 호출하면 모든 클라이언트의 APlayerController::ClientTravel() 함수가 호출되어 자동으로 따라간다.
APlayerController::ClientTravel()
클라이언트가 직접 호출하면 새로운 서버에 연결한다는 뜻이다.
서버에 의해 호출되면 새로운 레벨로 이동한다는 뜻이다.
다음 순서로 레벨을 이동할 것이다.
- GameStartupMap 레벨에서 시작해 Host할 것인지 Join할 것인지 선택한다.
- Lobby 레벨에서 플레이 가능 인원 수가 될 때까지 다른 플레이어를 기다린다.
- TransitionMap 레벨을 Transition 맵으로 하여 실제 플레이가 진행될 BlasterMap으로 이동한다.
Lobby 레벨을 위한 새로운 게임 모드를 생성한다.
- 멀티 플레이어에서는 GameModeBase가 아닌 GameMode를 선택해야 한다.
플레이어가 게임에 참가할 직후 호출되는 PostLogin() 함수를 오버라이드한다.
- 게임 모드는 서버에만 존재한다.
Game State는 게임에 참가 중인 플레이어를 Player State의 배열로 관리한다.
우선은 참가 중인 인원 수가 2명이면 Seamless Travel을 통해 BlasterMap으로 이동하도록 한다.
- AGameModeBase::bUseSeamlessTravel을 true로 설정하면 된다.
LobbyGameMode 클래스를 부모로 하는 BP_LobbyGameMode 블루프린트를 생성하고 다음과 같이 설정한 후, Lobby 레벨의 게임 모드로 설정한다.
Transition 맵으로 사용할 빈 레벨을 만들어준다.
- 메모리를 적게 사용할수록 빠르게 로드되기 때문에 Empty Level로 생성한다.
Project Settings - Maps & Modes - Default Maps - Advanced - Transition Map에서 Transition 레벨을 지정해준다.
Seamless Travel을 통해 다른 플레이어들과 함께 레벨로 이동하는 데 성공했다.
'Unreal Engine > UE5 C++ Multiplayer Shooter' 카테고리의 다른 글
Weapon 클래스 생성 (0) | 2023.04.01 |
---|---|
Network Role (0) | 2023.03.31 |
애니메이션 적용 (0) | 2023.03.30 |
캐릭터 카메라와 이동 (0) | 2023.03.30 |
애니메이션 리타겟 (0) | 2023.03.30 |