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

 

우선, 세션을 지역 검색이 활성화된 상태로 생성할 것이기 때문에, Steam 설정에서 지역을 설정해주어야 한다.

  • 같은 지역으로 설정한 플레이어들끼리만 연결된다.

 

 

캐릭터 클래스의 헤더 파일에 헤더를 포함한다.

  • generated.h 파일은 가장 마지막에 포함되도록 해야한다.

 

 

온라인 세션 인터페이스는 델리게이트를 사용한다.

  • 게임 세션을 생성하고 세션에 참가하려면 인터넷을 통해 정보를 전송해야 하는데, 접속 속도에 따라 걸리는 시간이 다르기 때문이다.


CreateSession() 함수를 실행하면 플랫폼(Steam)으로 요청이 전송되어 Steam에서 세션이 생성되고, 완료되면 다시 우리에게 알려 델리게이트를 실행하도록 한다.

 


FOnCreateSessionCompleteDelegate는 아래와 같이 정의되어 있다.

 

 

헤더를 포함한다.

 

 

캐릭터 클래스의 생성자에서 초기화 리스트로 CreateSessionCompleteDelegate에 OnCreateSessionComplete() 함수가 바인딩된 델리게이트를 바로 할당할 수 있다.

  • 언리얼 엔진에서는 클래스 내에서 클래스의 이름 대신 ThisClass를 사용할 수 있다.

 

 

OnlineSessionInterface는 TSharedPtr 타입으로 선언했기 때문에 사용 전에 유효한지 확인해야 한다.

 

IOnlineSessionPtr->GetNamedSession() 함수로 이름을 통해 플랫폼에 생성된 세션을 가져올 수 있다.

  • NAME_GameSession은 EName 열거형에 미리 설정되어 있는 값이다.

 

IOnlineSessionPtr->DestroySession() 함수로 세션을 파괴할 수 있다.

  • 이미 세션이 있다면 파괴하기 전까지는 새로운 세션을 만들 수 없다.

 

IOnlineSessionPtr->AddOnCreateSessionCompleteDelegate_Handle() 함수로 세션 생성 요청에 대한 응답이 오면 발동할 델리게이트 리스트에 델리게이트를 등록할 수 있다.

  • 여러 개의 함수가 등록된 하나의 델리게이트가 아닌, 여러 개의 델리게이트를 델리게이트 리스트에 등록하는 것이다.
  • 등록한 모든 델리게이트가 발동한다.


MakeShareable(new T) 함수로 TSharedPtr<T> 타입의 스마트 포인터를 만들 수 있다.

 

세션 생성 옵션을 다음과 같다.

  • NumPublicConnections: 최대 참가 인원
  • bAllowJoinInProgress: 세션이 진행 중일 때 참가 허용 여부
  • bAllowJoinViaPresence: 지역 검색으로 참가 허용 여부
  • bUsesPresence: 지역 검색 정보 표시 여부
  • bShouldAdvertise: 스팀이 다른 플레이어들에게 세션을 홍보할 수 있는지 여부
  • bUseLobbiesIfAvailable: 언리얼 엔진 5 초기 버전에는 버그가 있으므로, 세션을 찾지 못 할 경우 주석을 해제한다.
    5.0.3 버전에서는 추가해주지 않으면 세션 생성에 실패했다.

 

 

플랫폼(Steam)에 세션 생성 요청에 대한 응답을 받아 델리게이트에 등록했던 OnCreateSessionComplete() 함수가 실행되면 세션의 이름인 NAME_GameSession이 출력된다.

 

 

캐릭터 블루프린트에서 세션 생성 함수를 1번 키에 바인딩한다.

 

 

패키징 후 실행하고 나서 1번 키를 누르면 성공적으로 세션이 생성된 것을 확인할 수 있다.

  • Steam 데스크톱 앱이 실행 중이어야 한다.

 

'Unreal Engine > UE5 C++ Multiplayer Shooter' 카테고리의 다른 글

세션 참가  (0) 2023.03.26
세션 검색  (0) 2023.03.25
온라인 서브시스템으로 Steam 연결  (0) 2023.03.25
온라인 서브시스템(Online Subsystem)  (0) 2023.03.24
프로젝트를 패키징하는 방법  (0) 2023.03.23
profile

Make Unreal REAL.

@diesuki4

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

검색 태그