[UE] Multiplayer 6: Button Callbacks 만들기, SubSystem 접근하기
이번 시간에는 지난 시간에 만든 Widget 버튼을 Unreal C++ 변수와 연결시켜 줄 것이다. 버튼을 누르면 함수가 실행되게 만든다. 그 후, Subsystem 기능들을 가져와 쓸 수 있도록 기본적인 세팅을 할 것이다.
목차
Button Callbacks 만들기 + SubSystem에 접근하기
Button Callback 만들기
Menu.h
더보기
#pragma once
#include "CoreMinimal.h"
#include "Blueprint/UserWidget.h"
#include "Menu.generated.h"
UCLASS()
class MULTIPLAYERSESSIONS_API UMenu : public UUserWidget
{
GENERATED_BODY()
public:
UFUNCTION(BlueprintCallable)
void MenuSetup();
protected:
virtual bool Initialize() override;
private:
//meta = (BindWidget)을 사용하면 BP의 Button Widget이 아래의 변수와 연결된다. 이 때 BP와 C++변수 이름은 일치하여야 한다.
UPROPERTY(meta = (BindWidget))
class UButton* HostButton;
UPROPERTY(meta = (BindWidget))
UButton* JoinButton;
UFUNCTION()
void HostButtonClicked();
UFUNCTION()
void JoinButtonClicked();
// The subsystem designed to handle all online session functionality
class UMultiplayerSessionsSubsystem* MultiplayerSessionsSubsystem;
};
Button Callback 만들기
- 상위 클래스의 Initialize()함수를 override 한다.
- virtual bool Initialize() override;
- Button 변수 만들기
- UPROPERTY(meta = (BindWidget))
class UButton* HostButton; - UPROPERTY(meta = (BindWidget))
UButton* JoinButton; - meta = (BindWidget)을 사용하면 BP의 Button Widget이 아래의 변수와 연결된다. 이 때 BP와 C++변수 이름은 일치하여야 한다.
- UPROPERTY(meta = (BindWidget))
- Button을 눌렀을 때 연동되는 함수 만들기
- UFUNCTION()
void HostButtonClicked(); - UFUNCTION()
void JoinButtonClicked();
- UFUNCTION()
SubSystem에 접근하기
- 변수 추가
- class UMultiplayerSessionsSubsystem* MultiplayerSessionsSubsystem;
Menu.cpp
더보기
#include "Menu.h"
#include "Components/Button.h"
#include "MultiplayerSessionsSubsystem.h"
void UMenu::MenuSetup()
{
AddToViewport();
SetVisibility(ESlateVisibility::Visible);
bIsFocusable = true;
UWorld* World = GetWorld();
if (World)
{
APlayerController* PlayerController = World->GetFirstPlayerController();
if (PlayerController)
{
FInputModeUIOnly InputModeData;
InputModeData.SetWidgetToFocus(TakeWidget());
InputModeData.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock);
PlayerController->SetInputMode(InputModeData);
PlayerController->SetShowMouseCursor(true);
}
}
UGameInstance* GameInstance = GetGameInstance();
if (GameInstance)
{
//헤더에서 만든 MultiplayerSessionsSubsystem 변수에 Subsystem을 리턴 값을 넣어준다.
MultiplayerSessionsSubsystem = GameInstance->GetSubsystem<UMultiplayerSessionsSubsystem>();
}
}
bool UMenu::Initialize()
{
//Super버젼이 false면 false를 리턴한다.(=상위 클래스에서 Initialize 하는게 없으면 false를 리턴하여 Initialize()를 하지 않는다.)
if (!Super::Initialize())
{
return false;
}
if (HostButton)
{
//HostButton 클릭할 때 발생하는 이벤트를 Delegate로 연결해준다.
HostButton->OnClicked.AddDynamic(this, &ThisClass::HostButtonClicked);
}
if (JoinButton)
{
//JoinButton 클릭할 때 발생하는 이벤트를 Delegate로 연결해준다.
JoinButton->OnClicked.AddDynamic(this, &ThisClass::JoinButtonClicked);
}
return true;
}
void UMenu::HostButtonClicked()
{
//디버깅 테스트
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(
-1,
15.f,
FColor::Yellow,
FString(TEXT("Host Button Clicked"))
);
}
if (MultiplayerSessionsSubsystem)
{
MultiplayerSessionsSubsystem->CreateSession(4, FString("FreeForAll"));
}
}
void UMenu::JoinButtonClicked()
{
//디버깅 테스트
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(
-1,
15.f,
FColor::Yellow,
FString(TEXT("Join Button Clicked"))
);
}
}
헤더 추가
- #include "MultiplayerSessionsSubsystem.h"
- GetSubsystem<UMultiplayerSessionsSubsystem>()를 사용하기 위해서 위의 헤더를 추가하였.
SubSystem에 접근하기
- void UMenu::MenuSetup()
- UGameInstance* GameInstance = GetGameInstance();
if (GameInstance) {
//헤더에서 만든 MultiplayerSessionsSubsystem 변수에 Subsystem을 리턴 값을 넣어준다.
MultiplayerSessionsSubsystem = GameInstance->GetSubsystem<UMultiplayerSessionsSubsystem>();
}
- UGameInstance* GameInstance = GetGameInstance();
실행화면
'⭐ Unreal Engine > UE Multiplayer FPS TPS + ListenServer' 카테고리의 다른 글
[UE] Multiplayer 7-2: Subsystem Delegate 연결하기 (0) | 2023.07.17 |
---|---|
[UE] Multiplayer 7-1: Session 만들기 (0) | 2023.07.17 |
[UE] Multiplayer 5: Plugin: Plugin 만들기, Menu 생성하기 (0) | 2023.07.16 |
[UE] Multiplayer 4: Session 들어가기 (0) | 2023.07.15 |
[UE] Multiplayer 3: Session 생성하기 (0) | 2023.07.15 |
댓글
이 글 공유하기
다른 글
-
[UE] Multiplayer 7-2: Subsystem Delegate 연결하기
[UE] Multiplayer 7-2: Subsystem Delegate 연결하기
2023.07.17 -
[UE] Multiplayer 7-1: Session 만들기
[UE] Multiplayer 7-1: Session 만들기
2023.07.17 -
[UE] Multiplayer 5: Plugin: Plugin 만들기, Menu 생성하기
[UE] Multiplayer 5: Plugin: Plugin 만들기, Menu 생성하기
2023.07.16 -
[UE] Multiplayer 4: Session 들어가기
[UE] Multiplayer 4: Session 들어가기
2023.07.15