UNREAL · UI · 게임 시스템
조작키 안내 UI를 IMC에서 자동으로 뽑기
조작키 안내 화면을 손으로 관리하면 키를 바꿀 때마다 안내도 따로 고쳐야 하고, 결국 실제 조작과 어긋난다. 그래서 안내를 실제 입력 매핑(IMC)에서 자동 생성하기로 했다.
데이터 소스는 IMC
UInputMappingContext(IMC_Default)의 매핑을 덤프해 안내를 만든다.IA_Move(WASD), IA_Attack(LMB), IA_Burst(E), IA_Interaction(F)처럼 Enhanced Input 액션과 키가 이미 IMC에 다 있으니, 그걸 그대로 읽으면 리바인딩이나 매핑 변경이 안내에 자동 반영된다.
UE5.7에서 매핑 접근 경로가 바뀌었다
예전 mappings 프로퍼티가 deprecated돼서, 아래처럼 default_key_mappings를 거쳐야 한다.
# 예전: imc.get_editor_property('mappings') # deprecated
imc.get_editor_property('default_key_mappings').get_editor_property('mappings')IMC에 없는 키는 따로 합쳐야 한다
IMC 매핑만으로는 안내가 실제 조작과 어긋난다. PlayerController::InputKey에 하드코딩된 키 (F10 설정, T 퀵슬롯 휠, I 인벤토리, ESC 일시정지 등)는 IMC에 없기 때문이다. 그래서 IMC 매핑 + 하드코딩 키를 합쳐서 표시했다. 위젯은 URetrieveGamePanelWidget 서브클래스로, 카테고리별 색상으로 구분했다.
배운 점
안내 UI를 데이터 소스(IMC)에서 파생시키면 리바인딩·매핑 변경이 자동으로 반영돼 어긋날 일이 준다.
단, 코드에 하드코딩된 키는 IMC에 안 잡힌다. 두 출처를 합쳐야 화면 안내가 실제 조작과 일치한다. 그리고 UE5.7부터 IMC 매핑 접근 경로가 default_key_mappings 아래로 바뀐 점도 기억해 둘 것.