Make Unreal REAL.
article thumbnail
Unreal Engine 5 C++ Multiplayer Shooter

 

Non-Seamless Travel

클라이언트는 레벨을 이동할 때, 연결이 끊어졌다가 다시 같은 서버에 연결된다.
연결이 끊겼다가 재연결되기 때문에, 서버 연결 문제나 최대 인원 수 초과 등으로 인해 재연결이 불가능할 수도 있다.
레벨을 처음 로드할 때 발생한다.
서버에 처음 연결할 때 발생한다.
멀티 플레이어 매치가 끝난 후 새로운 게임이 시작할 때 발생한다.


Seamles Travel

레벨을 이동할 때 연결이 끊기지 않으므로 유저에게 매끄러운 경험을 제공할 수 있다.
재연결과 관련된 문제를 피할 수 있다.
사용하기 위해서는 Transition 레벨이 필요하다.
많은 메모리를 차지하는 레벨에 있을 때 그 레벨에 있는 상태에서 또 큰 레벨을 로드하면 부하가 크기 때문에, 적은 메모리를 차지하는 Transition 레벨로 이동하고 기존 레벨을 해제시킨 후 새로운 레벨을 로드한다.

 

UWorld::ServerTravel()

서버가 호출하면 모든 클라이언트의 APlayerController::ClientTravel() 함수가 호출되어 자동으로 따라간다.

 

APlayerController::ClientTravel()

클라이언트가 직접 호출하면 새로운 서버에 연결한다는 뜻이다.
서버에 의해 호출되면 새로운 레벨로 이동한다는 뜻이다.

 

다음 순서로 레벨을 이동할 것이다.

  1. GameStartupMap 레벨에서 시작해 Host할 것인지 Join할 것인지 선택한다.
  2. Lobby 레벨에서 플레이 가능 인원 수가 될 때까지 다른 플레이어를 기다린다.
  3. 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
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그