- 언리얼 엔진 5.1 버전부터 권장하는 Input 방식
- 플랫폼 별로 Input Mapping Context 를 달리해 설정 가능
- 플레이어의 현재 상태에 따라 키 매핑을 다르게 하기 쉬움.
- 이전 입력 시스템과 호환되며, 다양한 입력을 구현해야 하는 대규모 게임에 적합하다고 알려져 있음.
FireRate 구현 과정
- InputAction의 InputTrigger를 UInputTriggerPulse 로 설정했습니다.
- UInputTriggerPulse는 Interval 초 단위로 트리거를 발동합니다.
- UInputTriggerPulse 클래스는 UInputTrigger 클래스를 상속하고 있으며,
- UInputAction 클래스는 UInputTrigger들을
TArray<TObjectPtr<UInputTrigger>>
로 보관하고 있습니다.
- UInputTriggerPulse의 Interval에 접근해 무기의 FireRate를 설정하였습니다.
- 인게임에서 무기 교체 등에 따라 FireRate가 달라지면 Interval도 그에 맞게 수정해 주어야 합니다.
- 코드에서 Interval에 접근하기 위해 UInputTrigger 포인터를 UInputTriggerPulse 포인터로 캐스트해 접근했습니다.
static ConstructorHelpers::FObjectFinder<UInputAction> IA_SHOOT(TEXT("/Game/LS/Input/Actions/IA_SHOOT.IA_SHOOT"));
if ( IA_SHOOT.Succeeded())
{
ShootAction = IA_SHOOT.Object;
// check nullptr
LSCHECK(ShootAction->Triggers.Num() > 0);
TObjectPtr<UInputTriggerPulse> InteractInputTrigger = Cast<UInputTriggerPulse>(ShootAction->Triggers[0]);
// check nullptr
LSCHECK(nullptr != InteractInputTrigger);
InteractInputTrigger->Interval = FireRate;
}
얻은점
- 온라인 상 자료가 많지 않아 사용하기 위해 소스코드를 분석할 기회가 되었습니다.
- 그 과정속에서 엔진이 Enhanced Input을 어떻게 구현했는 지 구조를 알 수 있었고,
- 포인터 캐스트를 통해 자식 클래스의 멤버에 접근하는 방법을 익힐 수 있었습니다.
Leave a comment