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

 

멀티 플레이어에서 가장 중요한 클래스 2개는 게임 모드(Game Mode)와 게임 스테이트(Game State)이다.

게임 모드는 다른 레벨로 언제 이동할지, 스폰 위치를 어떻게 정할지 등 게임의 룰을 관리한다.
플레이어가 들어오고 나갈 때 호출되는 PostLogin(), Logout() 이벤트 함수가 구현되어 있다.
게임에 참가할 때 PostLogin() 함수가 호출되며, 떠날 때 Logout() 함수가 호출된다.
게임 모드는 게임 스테이트에 접근할 수 있다.
게임 스테이트는 게임의 정보를 관리한다.
플레이어 점수와 같은 개인의 정보는 플레이어 스테이트에서 관리한다.
게임 스테이트는 플레이어 스테이트의 배열을 관리한다.


Lobby 레벨에서 사용할 새로운 게임 모드를 생성하고 PostLogin(), Logout() 함수를 오버라이드한다.

 

 

언리얼 엔진 5 버전부터는 AGameModeBase::GetGameState<T>() 함수보다는, AGameModeBase::GameState.Get() 함수를 통해 안전하게 게임 스테이트를 가져오는 방법이 권장된다.

  • T* 형식의 Raw 포인터가 아닌, TObjectPtr<T> 같이 스마트 포인터와 비슷한 형식으로 되어있다.
  • 오브젝트가 실제로 언제 사용되었는지 알 수 있는 액세스 트래킹을 제공한다.

 

플레이어가 게임에 참가할 때, 현재 플레이어 수와 참가한 플레이어의 이름을 출력하도록 한다.

  • APlayerState::GetPlayerName() 함수를 통해 가져온 이름에는 Steam 사용자 이름이 자동으로 들어가 있다.

 

 

플레이어가 게임을 떠날 때도 현재 플레이어 수와 떠난 플레이어의 이름을 출력하도록 한다.

  • 아직은 완전히 떠나기 전이기 때문에 AGameStateBase::PlayeArray의 크기는 테스트용으로 1을 빼주어 표시해줘야 한다.

 

 

다른 컴퓨터에서 같은 코드로 패키징 한 게임이라도, 빌드 ID가 다르면 세션을 찾을 수 없다.

  • 테스트를 위해 FOnlineSessionSettings::BuildUniqueId를 1이라는 특정 값으로 통일시켜 준다.

 

 

DefaultGame.ini 파일에서 다음 내용을 추가해준다.

[/Script/Engine.GameSession]
MaxPlayers=100


위 설정은 하나의 게임 프로그램에 참가 가능한 최대 플레이어 수이고, FOnlineSessionSettings::NumPublicConnections는 한 세션에 참가할 수 있는 최대 플레이어의 수이다.

  • MaxPlayers의 기본값은 16이며, 늘려주지 않으면 NumPublicConnections 값을 17 이상의 값으로 설정해도 제한된다.

 


LobbyGameMode 게임 모드를 기반으로 하는 BP를 생성하고 기본 폰 클래스를 지정한다.

 


Lobby 레벨을 열고 World Settings에서 게임 모드를 설정한다.

 

 

성공적으로 같은 레벨에서 원격으로 만났다.

  • 게임 모드는 Listen 서버가 실행 중인 호스트에만 존재한다.

 

profile

Make Unreal REAL.

@diesuki4

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

검색 태그