Udemy에서 구매한 강의를 공부하면서 배운 내용입니다.
개인적으로 따로 알고싶어서 공부한 부분들도 있으니 내용에 틀린 것이 있을 수 있습니다.
https://www.udemy.com/course/unreal-engine-5-cpp-multiplayer-shooter/?couponCode=MT260602G3
Unreal Engine 5 C++ Multiplayer Shooter
<p><strong>Over 64 hours of content!</strong></p><p>Learn all about Unreal Engine multiplayer in this fully comprehensive C++ course. From scratch, we create a complete multiplayer shooter game, capable of creating and joining game sessions and connecting
www.udemy.com
이 강의를 들으며 공부했습니다.
FInputModeUIOnly
플레이어 컨트롤러에 적용하여 입력이 UI에만 전달되도록 설정하는 클래스
주로 메뉴 화면, 옵션 창, 로그인 화면, 로비 UI처럼
- 캐릭터 조작은 막고
- 버튼 클릭
- 텍스트 입력
- UI 네비게이션
만 가능하게 만들 때 사용한다.
강의 중 적은 코드
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();
private:
UPROPERTY(meta = (BindWidget))
class UButton* HostButton;
UButton* JoinButton;
};
Menu.cpp
void UMenu::MenuSetUp()
{
AddToViewport();
SetVisibility(ESlateVisibility::Visible);
SetIsFocusable(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);
}
}
}
MenuSetUp 흐름
1. UI를 화면에 표시
AddToViewport();
SetVisibility(ESlateVisibility::Visible);
2. UI가 키보드 입력을 받을 수 있도록 설정
SetIsFocusable(true);
bIsFocusable = true대신 사용
3. 플레이어 컨트롤러 가져오기
APlayerController* PlayerController =
World->GetFirstPlayerController();
입력 모드를 변경하기 위해 필요하다.
4. UI 전용 입력 모드 생성
FInputModeUIOnly InputModeData;
UI만 입력을 받을 수 있는 입력 모드
5. 포커스를 줄 위젯 설정
InputModeData.SetWidgetToFocus(TakeWidget());
현재 위젯에 키보드 포커스를 준다.
6. 마우스 잠금 설정
InputModeData.SetLockMouseToViewportBehavior(
EMouseLockMode::DoNotLock);
마우스를 뷰포트 안에 가둘지 결정한다.
7. 입력 모드 적용
PlayerController->SetInputMode(InputModeData);
플레이어 입력을 UI 전용으로 변경
8. 마우스 커서 표시
PlayerController->SetShowMouseCursor(true);
UI를 조작할 수 있도록 마우스 커서를 표시
SetWidgetToFocus
ENGINE_API FInputModeUIOnly&
SetWidgetToFocus(TSharedPtr<SWidget> InWidgetToFocus);
UI 입력 포커스를 받을 위젯을 설정한다.
사용 예시
InputModeData.SetWidgetToFocus(TakeWidget());
현재 UUserWidget을 포커스 대상으로 설정
반환형이 레퍼런스인 이유
체이닝(Chaining)을 지원하기 위해 자기 자신을 반환한다.
InputModeData
.SetWidgetToFocus(TakeWidget())
.SetLockMouseToViewportBehavior(
EMouseLockMode::DoNotLock);
이처럼 함수를 이어서 호출할 수 있다.
SetLockMouseToViewportBehavior
ENGINE_API FInputModeUIOnly&
SetLockMouseToViewportBehavior(
EMouseLockMode InMouseLockMode);
마우스를 뷰포트 내부에 가둘지 설정한다.
EMouseLockMode 종류
DoNotLock
EMouseLockMode::DoNotLock
마우스를 가두지 않는다.
게임 창 밖으로 이동 가능
LockAlways
EMouseLockMode::LockAlways
게임이 활성화 상태라면 항상 마우스를 뷰포트 안에 가둔다.
LockInFullscreen
EMouseLockMode::LockInFullscreen
전체 화면 모드일 때만 마우스를 가둔다.
LockOnCapture
EMouseLockMode::LockOnCapture
클릭 또는 드래그 등 입력이 발생했을 때 마우스를 가둔다.
사용 예시
InputModeData.SetLockMouseToViewportBehavior(
EMouseLockMode::DoNotLock);
마우스가 게임 창 밖으로 이동 가능
TakeWidget()
TakeWidget()
UUserWidget을 Slate 시스템의 SWidget 형태로 변환하여 반환한다.
이유
SetWidgetToFocus()는
TSharedPtr<SWidget>
형태를 요구한다.
하지만 UMG 위젯은
UUserWidget
기반이기 때문에 직접 전달할 수 없다.
따라서
TakeWidget()
을 사용하여 Slate 위젯으로 변환 후 전달한다.
사용 예시
InputModeData.SetWidgetToFocus(TakeWidget());
현재 위젯이 입력 포커스를 받도록 설정한다.
정리
FInputModeUIOnly
- UI만 입력 받도록 설정
- 캐릭터 조작 불가능
- 메뉴, 옵션, 로그인, 로비 UI에서 사용
주요 함수
SetWidgetToFocus()
- 입력 포커스를 줄 위젯 지정
SetLockMouseToViewportBehavior()
- 마우스 잠금 방식 설정
TakeWidget()
- UUserWidget → SWidget 변환
PlayerController->SetInputMode(InputModeData);
- UI 전용 입력 모드 적용
PlayerController->SetShowMouseCursor(true);
- 마우스 커서 표시
'언리얼 > 언리얼 학습' 카테고리의 다른 글
| FOnlineSessionSettings (0) | 2026.06.03 |
|---|---|
| GameInstance (0) | 2026.06.01 |
| GameMode (1) | 2026.06.01 |
| Delegate (델리게이트) (0) | 2026.06.01 |