728x90
반응형
안녕하세요. mane입니다.
이번에는 세션을 만들어보도록 하겠습니다. - Create Session
1. void CreateSession()
- 에디터안에서 함수를 실행할 것이기 때문에 UFUCTION(BlueprintCallable)을 붙여준다.
protected:
UFUNCTION(BlueprintCallable)
void CreateSession();
2. FOnCreateSessionCompleteDelegate
- FOnCreateSessionCompleteDelegate - 델리게이트를 선언한다.
- 선언을 찾아들어가면 해당 델리게이트의 파라미터(매개변수)를 찾을 수 있다.
- 이를 사용하기 위한(CallBack) OnCreateSessionComplete 함수를 선언한다.
protected:
// CreateSessionCompleteDelegate - 델리게이트 실행 함수(CallBack)
void OnCreateSessionComplete(FName SessionName,bool bWasSuccessful);
private:
// CreateSessionCompleteDelegate - 델리게이트
FOnCreateSessionCompleteDelegate OnCreateSessionCompleteDelegate;
3. FOnCreateSessionCompleteDelegate 초기화
- 생성자에서 초기화해주고 객체 함수를 생성해준다. (OnCreateSessionComplete)
- &ThisClass == &ProjectCharacterClass
OnCreateSessionCompleteDelegate(FOnCreateSessionCompleteDelegate::CreateUObject(this,&ThisClass::OnCreateSessionComplete))
4. 함수 작성
- CreateSession()
void AOSSPluginCharacter::CreateSession()
{
if(!OnlineSessionInterface.IsValid()) return; // OnlineSessionInterface 없다면 return
/**
* NAME_GameSession - 전역 변수
* 기존에 세션이 있는지 확인한다.
* 만약 세션이 있다면 NAME_GameSession에 해당하는 세션을 파괴한다.
* CreateSessionCompleteDelegate_Handle에 콜백함수를 바인딩해준다.
**/
const auto ExistingSession = OnlineSessionInterface->GetNamedSession(NAME_GameSession); //
if(ExistingSession != nullptr)
{
OnlineSessionInterface->DestroySession(NAME_GameSession);
}
OnlineSessionInterface->AddOnCreateSessionCompleteDelegate_Handle(OnCreateSessionCompleteDelegate);
/**
* #include "OnlineSessionSettings.h"
* SessionSettings를 공유포인터로 생성해준다.
* SessionSettings 설정
* OnlineSessionInterface -> CreateSession의 argument를 넣어준다
*/
TSharedPtr<FOnlineSessionSettings> SessionSettings = MakeShareable(new FOnlineSessionSettings());
SessionSettings->bIsLANMatch = false; // Steam을 사용할 것이기 때문에 LanMatch = false
SessionSettings->NumPublicConnections = 4; // 세션에 연결 가능한 인원
SessionSettings->bAllowJoinInProgress = true; // 세션이 실행 중(게임 중) 참여가능 여부
SessionSettings->bAllowJoinViaPresence = true; // 정확하지 않음 - Steam 사용자와 같은 지역에서 참여 가능 여부
SessionSettings->bShouldAdvertise = true; // Steam을 통해 세션을 알린다.(다른 플레이어가 해당 세션을 찾아 참여 가능)
SessionSettings->bUsesPresence = true; // 정확하지 않음 - Steam 사용자와 같은 지역에서 세션을 찾을 수 있는 여부
SessionSettings->bUseLobbiesIfAvailable = true; // Lobby API를 지원할 경우 Lobby 사용 여부
const ULocalPlayer* Localplayer = GetWorld()->GetFirstLocalPlayerFromController();
OnlineSessionInterface->CreateSession(*Localplayer->GetPreferredUniqueNetId(),NAME_GameSession,*SessionSettings);
}
- OnCreateSessionComplete
void AOSSPluginCharacter::OnCreateSessionComplete(FName SessionName, bool bWasSuccessful)
{
if(bWasSuccessful) // 세션 생성 성공
{
if(GEngine)
{
GEngine->AddOnScreenDebugMessage(
-1,
15,
FColor::Blue,
FString::Printf(TEXT("세션 생성 성공 : %s"),*SessionName.ToString()));
}
}
else // 세션 생성 실패
{
if(GEngine)
{
GEngine->AddOnScreenDebugMessage(
-1,
15,
FColor::Red,
FString::Printf(TEXT("세션 생성 실패")));
}
}
}
5. 에디터 실행
- 함수를 작성했다면 컴파일 후 에디터를 실행해준다.
- 기본 3인칭 캐릭터 블루프린트 /Game/ThirdPerson/Blueprints/BP_ThirdPersonCharacter를 열어준다.
- 원하는 키를 눌러 CreateSession 함수를 실행할 수 있도록 연결해준다.
- 독립형 실행(Standalone)으로 실행 후 설정한 키를 눌러 세션이 생성되는지 확인한다.
- 스팀 실행 필수
728x90
반응형
'언리얼 엔진 > Online Subsystem Steam C++' 카테고리의 다른 글
언리얼엔진 5 C++ 온라인 서브시스템 스팀 - Access the Online Subsystem (1) | 2022.05.02 |
---|---|
언리얼엔진 5 C++ 온라인 서브시스템 스팀 - Setup (0) | 2022.05.01 |
언리얼엔진 C++ OnlineSubsystem Interface 얻어오기 (0) | 2022.04.06 |