이전 글 보기
https://mountain-noroo.tistory.com/66
인벤토리 끄기
지금의 인벤토리는 한 번 켜지면 끄는 방도가 없다.
게다가 포커스가 바뀌지도 않아 아이템을 사용하지도 못할 것이다.
그래서 InputMode를 변경하는 것부터 해보겠다.
void UInvenMgr::OpenInventoryUI()
{
// 현재 게임모드를 체크
AUnreal_3thGameModeBase* GameMode = Cast<AUnreal_3thGameModeBase>(UGameplayStatics::GetGameMode(m_World));
if (!IsValid(GameMode))
return;
// 게임모드로 부터 메인 HUD 가져오기
UMainHUD_Base* MainHUD = GameMode->GetMainHUD();
// 인벤토리 내용으로 위젯을 갱신
ResetWidget();
// InventoryWidget Visible
MainHUD->ShowInventoryUI(true);
// 플레이어 컨트롤러의 입력모드를 UI 모드로 전환한다.
APlayerController* pController = m_World->GetFirstPlayerController();
// InputMode 생성, 세팅
FInputModeUIOnly uionly{};
pController->SetInputMode(uionly);
// 마우스 커서 보이게 함
pController->bShowMouseCursor = true;
}
인벤토리를 여는 함수에 InputMode를 만들고 설정하는 부분을 추가하였다.
플레이어 컨트롤러의 입력모드를 UIOnly로 설정하고, 인벤토리를 조작할 상황을 대비하여 커서를 보이게 바꾸어주었다.
ResetWidget은 위젯에 보여지는 이전 데이터를 지우고 새 데이터로 갱신해 주는 함수로 어제 만들었던 부분을 모듈화 시켰다.
void UInvenMgr::CloseInventoryUI()
{
// 현재 게임모드를 체크
AUnreal_3thGameModeBase* GameMode = Cast<AUnreal_3thGameModeBase>(UGameplayStatics::GetGameMode(m_World));
if (!IsValid(GameMode))
return;
// 게임모드로 부터 메인 HUD 가져오기
UMainHUD_Base* MainHUD = GameMode->GetMainHUD();
MainHUD->ShowInventoryUI(false);
// 플레이어 컨트롤러의 입력모드를 game 모드로 전환한다.
APlayerController* pController = m_World->GetFirstPlayerController();
FInputModeGameOnly gameonly{};
pController->SetInputMode(gameonly);
pController->bShowMouseCursor = false;
}
인벤토리를 끌 때도 마찬가지다.
그러나 문제가 하나 있는데 UIOnly 인풋모드로 전환 된 뒤에는 캐릭터 인풋 액션이 반응하지 않는다는 것이다.
대신 UMG으로 인풋을 받을 수 있기 때문에 UMG에서 CloseInventoryUI를 호출해야 한다.
UMG 블루프린트에서 인풋을 추가하기 위해 OnKeyDown 함수를 오버라이드 하였다.
입력이 들어온 버튼이 I인 경우, 인벤토리 매니저의 Static 함수인 GetInst를 불러와 매니저를 획득하고
매니저의 CloseInventoryUI함수를 불러오고 반환한다.
반환 값은 아무거나 만들어서 넣어주었다.
블루프린트에서 직접 만든 함수를 호출하기 위해서는 UFUNCTION(BluepringCallable) 매크로를 사용해야 한다는 점을 잊지 말자.
'언리얼 > Assortrack UE5' 카테고리의 다른 글
[언리얼] 학원 22일차: Material(ScreenUV, MRT(Deffered)) 활용 (0) | 2023.09.26 |
---|---|
[언리얼] 학원 21일차: 툴팁, 마우스 커서, 빌보드 (0) | 2023.09.25 |
[언리얼] 학원 19일차: 아이템 획득, 인벤토리 매니저 (0) | 2023.09.21 |
[언리얼] 학원 18일차: 액터 위 UI, 인벤토리(리스트) (0) | 2023.09.20 |
[언리얼] 학원 17일차: 버튼, RenderTexture (0) | 2023.09.19 |