12. InputComponent 완료
Input에 대한 학습 및 구현을 이해하느라 포스팅이 조금 걸렸습니다.ㅠㅠ
Lyra에서는 EnhancedInput을 사용하는데, 기존 Input에 비해 조금 더 복잡한 입력 시스템을 처리하기 위한 방법입니다.
기존 Input은 보통의 엔진에서 구현하듯 매 프레임마다 각 키의 상태를 직접적으로 체크하는 방식이었습니다.
Enhanced Input은 입력의 단위를 InputActions으로 정의하고, 이를 InputMappingContext에 등록하여 처리합니다.
이는 다양한 입력 장치에 대해 대응할 수 있도록 하며, 게임 상황에 따라 동적으로 변경이 가능하다는 이점이 있습니다.
이 과정은 HeroComponent에서 이루어지며, InitState가 DataAvailable 상태에서 DataInitialized 상태로 변경될 때 Camera와 함께 부착됩니다.
Input이 등록되는 로직의 흐름은 다음과 같습니다.
1. PawnExtensionComponent를 가져온다 (PawnData를 가져오기 위해)
2. PawnData를 가져온다. (InputConfig를 가져오기 위해)
* InputConfig는 이후 Find***함수 시리즈를 통해 Input을 바인딩할 때 제대로 등록된 Input이 등록되는지 검사하는 역할을 한다 .
3. 그 후 이전에 Blueprint로 매핑해둔 PlayerMappingInputConfig를 Subsystem에 등록한다.
UEnhancedInputLocalPlayerSubsystem* Subsystem = LP->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>();
- 이것이 Input을 등록할 Subsystem
UHmInputComponent* HmIC = CastChecked<UHmInputComponent>(PlayerInputComponent);
{
HmIC->BindNativeAction(InputConfig, GameplayTags.InputTag_Move, ETriggerEvent::Triggered, this, &ThisClass::Input_Move, false);
HmIC->BindNativeAction(InputConfig, GameplayTags.InputTag_Look_Mouse, ETriggerEvent::Triggered, this, &ThisClass::Input_LookMouse, false);
}
- 그 후 InputComponent에서 Bind해준다.
구현하면서 한 가지 이슈가 있었는데, 다 작성한 후 실행해보니 키 입력도 안먹고, 마우스 입력도 안먹는 것이었습니다.
HeroComponent에서부터 BreakPoint를 걸고 하나씩 범위를 좁혀나가다보니, DefaultInputConfigs Array가 비어 있는 것을 확인했습니다.
그래서 역으로 이 Array가 비어있는지 거슬러 올라가다보니, Pawn Blueprint에서 PMI(Player Mapping Input Config)를 설정해주지 않아서 발생한 문제였던 것이 확인되어 정상 작동되는 것을 확인했습니다.