UMG 셋팅하고 적용하기
프로젝트 파일로 가서 source -> 프로젝트이름 폴더 -> 프로젝트이름 .build.cs 라는 c#문서를 열어서 UMG를 추가해준다. 에디터에서 마우스오른클 ->유저 인터페이스 -> 위젯 블루프린트를 만들고 대충
lfio.tistory.com
APlayerController::SetInputMode
Setup an input mode.
docs.unrealengine.com
https://docs.unrealengine.com/4.26/en-US/API/Runtime/Engine/GameFramework/FInputModeDataBase/
FInputModeDataBase
Abstract base class for Input Mode structures
docs.unrealengine.com
https://docs.unrealengine.com/4.26/en-US/API/Runtime/Engine/GameFramework/FInputModeUIOnly/
FInputModeUIOnly
Data structure used to setup an input mode that allows only the UI to respond to user input.
docs.unrealengine.com
void UPuzzlePlatformsGameInstance::LoadMenu()
{
//생성자에서 mMenuClass가 할당되지 않을경우 리턴한다. (이전 장에서 다룸)
if (!ensure(mMenuClass != nullptr)) return;
//CreateWidget<UUserWidget>함수로 위젯을 생성한다.
UUserWidget* Menu = CreateWidget<UUserWidget>(this, mMenuClass);
if (!ensure(Menu != nullptr)) return;
//UUserWidget::AddToViewport()로 뷰포트에 호출한다.
Menu->AddToViewport();
FInputModeUIOnly InputModeData;
}
현재 LoadMenu exec 함수에서 나타나는 위젯에서는 마우스가 Lock되고 보이지 않은 문제가 발생하여 해결해야함.
APlayerController::SetInputMode
SetInputMode 함수를 이용하여 입력 모드를 설정할 수 있다.

FInputModeDataBase 구조체가 들어간다.
FInputModeUIOnly 구조체를 사용하자.
UI만 사용자 입력에 응답할 수 있도록 하는 입력 모드를 설정하는 데 사용되는 데이터 구조입니다.
구조체 내부를 설정할 함수
마우스 락을 설정할 함수 내부에 열거형 속성이 있다.
//DoNotLock 옵션으로 마우스 락 설정을 한다.
InputModeData.SetLockMouseToViewportBehavior(EMouseLockMode::DoNotLock);
옵션을 적절히 넣어서 설정을 해준다.
SetWidgetToFocus 함수를 이용하여 포커싱할 위젯을 정해야한다.
함수에는 SWidget 타입의 매개변수가 들어가야한다. 코드내에 있는 변수타입은 UUserWidget
UUserWidget에서 SWidget을 get 하는 함수를 찾아서 넣는다.
https://docs.unrealengine.com/4.27/en-US/API/Runtime/UMG/Components/UWidget/TakeWidget/
UWidget::TakeWidget
Gets the underlying slate widget or constructs it if it doesn't exist.
docs.unrealengine.com
UUserWidget의 부모인 UWidget을 얻을 수 있는 함수 TakeWidget을 호출하면 UWidget이 리턴된다.
이를 대입하면 SetWidgetFocus를 정상적으로 호출할 수 있음.
//PlayerController->SetInputMode
InputModeData.SetWidgetToFocus(Menu->TakeWidget());
//03.03 추가
//아래 처럼 코드를 수정해야한다 (UE4.27은...)
//InputModeData.SetWidgetToFocus(Menu->TakeWidget());
Menu->bIsFocusable = true;
호출한 모습.
PlayerController->SetInputMode(InputModeData);
설정된 InputModeData 구조체를 매개변수로 전달하여 InputMode를 설정한다.
'unreal engine' 카테고리의 다른 글
[언리얼엔진] 커스텀 버튼과 폰트 (0) | 2022.02.28 |
---|---|
[언리얼엔진] ue4 위젯 레이아웃 고급기능 (0) | 2022.02.27 |
[언리얼엔진] C++에서 언리얼 모션 그래픽(UMG) 로드 및 표시하기 (0) | 2022.02.22 |
[언리얼엔진] C++에서 UI 클래스에 엑세스 / FClassFinder / UMG Module (0) | 2022.02.21 |
[언리얼엔진] WBP 앵커 + Host, Join UI 만들기 (0) | 2022.02.20 |