이전에 UMultiplayerSessionSubsystem을 구현했으니 여기에 UI를 연동해 쉽게 Session을 Hosting하고 Join할 수 있게 할 것이다.
{ Menu UI 추가 }
1. Menu UI의 기능을 구현할 class MULTIPLAYERSESSIONS_API UMenu : public UUserWidget 를 추가한다.
UMenu 클래스의 멤버 변수
타입 | 이름 | 설명 |
UMultiplayerSessionSubsystem* | MultiplayerSessionSubsystem | Multiplayer Plugin의 MultiplayerSessionSubsystem 참조 |
int32 | NumPublicConnections | 최대 동시 연결 가능한 클라이언트 수 |
FString | MatchType | 세션의 매치 타입 |
FString | PathToLevel | Lobby Level 경로 |
UButton* | HostButton | Menu Widget의 HostButton (UPROPERTY(meta = (BindWidget)) 로 선언하여 블루프린트 위젯과 연결) |
UButton* | JoinButton | Menu Widget의 JoinButton (UPROPERTY(meta = (BindWidget)) 로 선언하여 블루프린트 위젯과 연결) |
UMenu 클래스의 멤버 함수
함수명 | 설명 | 기능 |
void UMenu::MenuSetup(int32 NumberOfPublicConnections, FString TypeOfMatch, FString LobbyPath) | 메뉴 위젯이 있는 레벨이 시작될 때 호출되는 함수로, 메뉴 위젯 초기 설정을 담당한다. |
|
bool UMenu::Initialize() | UMenu 클래스에서 가장 먼저 호출되는 함수이다. | HostButton과 JoinButton이 클릭 될 때 호출될 함수를 바인딩 |
void UMenu::NativeDestruct() | 최상위 위젯이 뷰포트에 있고 World가 종료될 때 호출됩니다. 5.1 이상 언리얼 버전에서는 OnLevelRemovedFromWorld() 대신 NativeDestruct()를 사용하면 된다. |
UMenu::MenuTearDown() 호출 |
void UMenu::MenuTearDown() | NativeDestruct()가 호출해주는 함수로, Menu가 소멸될때 필요한 동작을 담당한다. | PlayerController의 InputMode를 UIOnly에서 GameOnly로 설정 |
void UMenu::OnCreateSession(bool bWasSuccessful) | MultiplayerSessionSubsystem의 Session 이벤트와 연결된 Delegate에 Callback 함수로, 세션 생성이 완료되면 호출 | 플레이어를 Lobby 레벨로 이동 |
void UMenu::OnFindSession(const TArray& SessionResults, bool bwasSuccessful) | MultiplayerSessionSubsystem의 Session 이벤트와 연결된 Delegate에 Callback 함수로,세션 검색이 완료되면 호출 | 검색된 세션들 중에서 매치 타입이 일치하는 세션에 참가 |
void UMenu::OnJoinSession(EOnJoinSessionCompleteResult::Type Result) | MultiplayerSessionSubsystem의 Session 이벤트와 연결된 Delegate에 Callback 함수로,세션에 참가하면 호출 | 참여한 세션의 서버 주소를 받아와 서버에 접속 |
void UMenu::OnStartSession(bool bWasSuccessful) | MultiplayerSessionSubsystem의 Session 이벤트와 연결된 Delegate에 Callback 함수로, 세션이 시작되면 호출 | |
void UMenu::OnDestroySession(bool bWasSuccessful) | MultiplayerSessionSubsystem의 Session 이벤트와 연결된 Delegate에 Callback 함수로, 세션이 소멸되면 호출 | |
void UMenu::HostButtonClicked() | HostButton 버튼과 연결된 클릭 Callback 함수들 | MultiplayerSessionSubsystem의 CreateSession 함수를 호출한다. |
void UMenu::JoinButtonClicked() | JoinButton 버튼과 연결된 클릭 Callback 함수들 | MultiplayerSessionSubsystem의 FindSession 함수를 호출한다. |
UMenu 클래스를 설계하면서 UMenu는 MultiplayerSessionSubsystem에 의존하되, MultiplayerSessionSubsystem는 UMenu를 전혀 모르는 일방적인 의존관계를 유지하는 것에 집중했다.
2. User Widget의로 Menu Widget을 만든다.
결과