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)를 설정해주지 않아서 발생한 문제였던 것이 확인되어 정상 작동되는 것을 확인했습니다.
'Unreal Engine > [Inflearn_rookiss] UE5 Lyra 분석' 카테고리의 다른 글
13-1. 에셋이 불러와지지 않는 버그 (0) | 2024.10.27 |
---|---|
13. Teleport (1) | 2024.10.27 |
11. Camera Blending과 Update (1) | 2024.10.13 |
10. Camera의 부분적 구현 (0) | 2024.10.12 |
9. Pawn Extension 및 Init State 내용 정리 (0) | 2024.10.11 |
댓글