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 |