1. UMultiplayerSessionsSubsystem 클래스의 코드 설명
코드 설명:
- UMultiplayerSessionsSubsystem::UMultiplayerSessionsSubsystem(): 클래스 생성자. 델리게이트를 초기화하여 특정 이벤트가 발생했을 때 호출할 함수를 등록합니다.
- CreateUObject(this, &ThisClass::OnCreateSessionComplete): 델리게이트에 this 객체의 OnCreateSessionComplete 메서드를 바인딩하여 세션 생성 완료 시 호출하도록 설정합니다.
- IOnlineSubsystem* Subsystem = IOnlineSubsystem::Get();: 현재 프로젝트의 온라인 서브시스템(예: 스팀)을 가져옵니다.
- SessionInterface = Subsystem->GetSessionInterface();: 세션 관련 기능을 사용할 수 있는 인터페이스를 가져옵니다.
2. CreateSession 메서드
코드 설명:
- if (!SessionInterface.IsValid()): 세션 인터페이스가 유효하지 않으면 세션을 생성할 수 없으므로 함수 종료.
- auto ExistingSession = SessionInterface->GetNamedSession(NAME_GameSession);: 이미 존재하는 세션이 있는지 확인.
- SessionInterface->DestroySession(NAME_GameSession);: 기존 세션이 있으면 제거.
- LastSessionSettings = MakeShareable(new FOnlineSessionSettings());: 새로운 세션 설정 객체를 생성.
- LastSessionSettings->bIsLANMatch = ...: 세션이 LAN 경기인지 여부를 설정.
- LastSessionSettings->Set(FName("MatchType"), MatchType, ...);: 세션 설정에 커스텀 매치 유형을 추가.
- if (!SessionInterface->CreateSession(...)): 세션 생성 시도. 실패 시 델리게이트 제거 및 실패 이벤트 브로드캐스트.
3. FindSessions 메서드
코드 설명:
- FindSessionsCompleteDelegateHandle = ...: 세션 검색 완료 시 호출될 델리게이트를 등록.
- LastSessionSearch = MakeShareable(new FOnlineSessionSearch());: 세션 검색 객체 생성.
- LastSessionSearch->QuerySettings.Set(...): 세션 검색 조건을 설정하여 SEARCH_PRESENCE 필터링.
- if (!SessionInterface->FindSessions(...)): 세션 검색 시도. 실패 시 델리게이트 제거 및 실패 브로드캐스트.
4. JoinSession 메서드
코드 설명:
- JoinSessionCompleteDelegateHandle = ...: 세션 참가 완료 시 호출될 델리게이트 등록.
- if (!SessionInterface->JoinSession(...)): 세션 참가 시도. 실패 시 델리게이트 제거 및 실패 브로드캐스트.
5. 세션 종료 및 재생성 (DestroySession 메서드)
기존의 세션을 삭제하고, 필요에 따라 새로운 세션을 생성하는 로직이 포함되어 있습니다
.if (!SessionInterface->DestroySession(NAME_GameSession)) {
MultiplayerOnDestroySessionComplete.Broadcast(false);
}
재생성 플래그: bCreateSessionOnDestroy 플래그가 true일 경우, 세션 삭제 후 자동으로 CreateSession이 호출됩니다.
6. UI와의 연동 (UMenu 클래스)
UI 버튼과 연동하여 사용자가 세션 생성 및 참가를 손쉽게 할 수 있도록 합니다.
if (HostButton) {
HostButton->OnClicked.AddDynamic(this, &ThisClass::HostButtonClicked);
}
if (JoinButton) {
JoinButton->OnClicked.AddDynamic(this, &ThisClass::JoinButtonClicked);
}
입력 모드 설정: UI 사용 시 플레이어 컨트롤러의 입력 모드를 UI 전용 모드로 설정합니다.
FInputModeUIOnly InputModeData;
PlayerController->SetInputMode(InputModeData);
PlayerController->SetShowMouseCursor(true);
'언리얼 엔진 5' 카테고리의 다른 글
언리얼엔진5 C++로 정복하기(11) 언리얼엔진 5.4 DLSS 적용하기 (1) | 2024.11.13 |
---|---|
언리얼엔진5 C++로 정복하기(9) 온라인 스팀 서비스로 멀티플레이 (0) | 2024.11.07 |
언리얼엔진5 C++로 정복하기(8) 객체들에게 왜 대부분 포인터가 붙을까? (0) | 2024.02.20 |
언리얼엔진5 C++로 정복하기(7) 델리게이트, 인라인 (0) | 2024.02.19 |
언리얼엔진5 C++로 정복하기(6) 적 타격 (1) | 2024.02.05 |