중단점을 사용하여 디버깅하면 창 포커스가 변경될 수 있으며, 이는 애플리케이션의 위젯 포커스에 영향을 미칠 수 있습니다. 이 점이 입력 디버깅을 어렵게 합니다. 중단점으로 인해 UI가 디버깅하려는 상태가 아닌 다른 상태로 바뀔 수 있기 때문입니다. 이러한 제한을 극복하려면 조건부 중단점(conditional breakpoints) 을 사용합니다.
히트 수가 있는 조건부 중단점
조건부 중단점을 사용하는 가장 간단한 방법은 중단점에 히트 수(hit count) 를 추가하여 중단점이 몇 번의 클릭 후에 트리거되게 하는 것입니다.
Visual Studio에서 히트 수 조건을 사용하여 만든 조건부 중단점 예시.
히트 수를 추가한 뒤에는 관심 위젯이 최종 클릭 시 클릭되는지 확인해야 합니다.
히트 수와 같은 조건을 구성하는 방법에 대한 자세한 정보는 사용하는 IDE의 문서를 참고하세요.
위젯 리플렉터를 사용한 조건부 중단점
위젯 리플렉터(Widget Reflector)를 사용하여 특정 위젯에 대한 조건부 중단점을 얻을 수 있습니다. 그렇게 하려면 위젯을 식별한 뒤 [CBP] 를 클릭합니다. 그러면 중단점이 해당 위젯에 대해서만 활성화됩니다. 예를 들어 특정 버튼에 대해서만 트리거되는 SButton::OnMouseButtonDown 에 중단점을 추가할 수 있습니다.
범용 UI 입력 문제 해결 FAQ
다음은 범용 UI를 사용하는 개발자가 종종 직면하는 문제 또는 질문입니다.
UI에 영향을 미치는 틱/게임 일시정지를 어떻게 우회하나요?
현재 범용 UI는 LocalPlayerSubsystems 와 함께 작동합니다. 게임이 일시정지되면 이 서브시스템은 틱되지 않습니다. 서브시스템이 틱되지 않으면 CommonBoundActionBar를 포함한 범용 UI가 작동하지 않습니다. 이를 우회하는 방법으로, UI의 의도된 기능 또는 퍼포먼스와 상충되지 않는 경우 관련 액터 및 위젯을 일시정지 시 틱 가능(tickable when paused) 으로 설정할 것을 권장합니다. 필요한 경우 그렇게 하기 위한 커스텀 자손 클래스를 유도합니다.
키 핸들러 메서드에서 아날로그 입력을 얻게 되는 이유가 무엇인가요?
UE5에서 InputKey 와 InputAxis 행동은 PlayerController 레벨에서 통합되어 있습니다. 가짜 입력을 주입하기 쉽게 만들고 향후 더 쉬운 업데이트를 위해 입력 파라미터를 번들링하는 것이 목표입니다.
UE 5.0 이전의 코드가 있는 경우, 이제 아날로그 입력이 키 핸들러 콜백을 트리거하거나 그 반대가 될 수도 있습니다. 범용 UI는 이 현상이 유의미한 영향을 미치지 않도록 제대로 방지해야 합니다. 그러나 입력 파이프라인에서 조기에 디버깅하는 경우 이러한 크로스 트리거링 문제를 확인할 수 있습니다. 예를 들어 FCommonAnalogCursor 는 입력 프로세서이므로 입력 파이프라인의 앞부분과 상호작용합니다. 이 상호작용 때문에 FCommonAnalogCursor::HandleKeyDownEvent 에서 크로스 트리거링이 발생할 수 있습니다.
입력 모드가 메뉴일 때 게임 입력을 얻게 되는 이유는 무엇인가요?
UCommonUIActionRouterBase::CanProcessNormalGameInput 에 따라 UE5는 게임 뷰포트에 마우스 캡처가 있는 경우 메뉴 모드에서의 게임 입력을 허용합니다. 따라서 메뉴에 있을 때 월드 내 프리뷰 아이템과 캐릭터를 조작할 수 있습니다. 이 행동이 필요하지 않다면 원하는 입력 환경설정에서 뷰포트 마우스 캡처를 비활성화하세요.