2026/08/10 TIL
InputMode 문제
Notification Widget을 띄울 때, InputMode가 GameAndUI로 고정되는 오류가 있었다.
처음에 InputMode를 설정할 때 각각의 InputMode를 UIManager에서 함수 파라미터로 받아서 설정하는 걸로 했다가, 매번 똑같은 위젯을 실행하는 데 InputMode를 각각 설정해줘야하는 문제가 있어서 각각의 위젯에서 InputMode를 설정하는 방식으로 바꿨다.
// CPNotificationWidget.h
void SetInputMode(ECPInputMode Mode){ InputMode = Mode; }
이렇게 각 위젯마다 SetInputMode라는 함수를 통해 InputMode를 설정한 뒤, UI Manager에서 각각의 위젯의 InputMode를 읽어낸 후 해당 InputMode 정보를 포함해서 위젯을 배열에 저장하고 띄우는 방식으로 구현이 되어있었다.
T* PushWidget(TSubclassOf<T> WidgetClass)
{
T* Widget = CreateWidget<T>(GetWorld(), WidgetClass);
if (Widget)
{
Widget->AddToViewport(OpenWidgets.Num());
ECPInputMode InputMode = ECPInputMode::GameAndUI; // 디폴트값
if (auto* PopupWidget = Cast<UCPBasePopupWidget>(Widget))
{
InputMode = PopupWidget->InputMode;
}
// 열린 위젯 배열에 추가
OpenWidgets.Add({Widget, InputMode});
UpdateInputMode();
}
return Widget;
}
그런데 실행 순서의 문제로 SetInputMode를 실행하는 것보다 PushWidget쪽에서 InputMode를 읽어들이는게 빨라서 원하는 InputMode로 설정할 수 없는 문제가 발생했다.

그리고 GameAndUI InputMode로 덮어씌워지는 것 같아서 원인을 찾아보니 WBP에서 설정된 InputMode가 그대로 읽혀지고 있는 거였다.

그래서 결국 각 WBP마다 블루프린트에서 값을 지정해주는 구조로 변환하기로 했다. (기존의 SetInputMode 삭제)
슬라이더 미니게임에서 문제가 발생했다.

성공 범위를 초록색으로 표시하도록 했는데, 범위 자체는 기존에 설정한 0.3만큼의 범위 안에 들어와야 성공이 되는 정상적인 로직인데 UI로 그려지는 녹색범위 크기만 자꾸 달라져서 보이는 것과 인식되는 것에 차이가 생겼다.