EnhancedInputSystem
언리얼 엔진 4 은 기본 입력 동작 및 축 설정을 프로젝트 세팅에서 설정하여 사용했습니다. 언리얼 엔진 5부터는 지금까지 사용했던 축 및 액션 매핑은 폐기 되고 대신 향상된 입력 액션 및 입력 매핑 컨텍스트(EnhancedInputSystem)를 사용하라고 권고하고 있습니다.
폐기되었다고 축 및 액션 매핑을 사용 수 없다는 것은 아닙니다. 언리얼 엔진 4처럼 사용할 수는 있지만 이후 버전이 올라가면서 버그라던가 업데이트를 지원하지 않는다는 뜻이겠지요. 프로젝트에 따라서 축 및 액션 매핑을 사용하거나, 언리얼 엔진 5에서 사용하는 EnhancedInputSystem을 사용하시면 됩니다.
EnhancedInputSystem을 사용할 때 입력 키에 해당하는 입력 값을 받고자 합니다. 축 및 액션 매핑의 GetInputAxisValue 함수처럼 말이죠.
캐릭터의 전방 이동을 나타내는 MoveForward 매핑의 입력 값을 받는다고 할 때 언리얼 엔진 4에서는 다음과 같은 코드를 사용하면 간단하게 구할 수 있습니다.
float APRPlayerCharacter::GetMoveForward() const
{
return GetInputAxisValue("MoveForward");
}
캐릭터의 이동을 나타내는 ActionInput의 값 타입을 Axis2D(Vector2D)로 생성해서 MoveForward 매핑처럼 값을 가져오는 코드는 다음과 같습니다.
.h
/** 이동 입력 액션 */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
class UInputAction* InputMove;
.cpp
float APRPlayerCharacter::GetMoveForward() const
{
UnhancedInputComponent* EnhancedInputComponent = Cast<UEnhancedInputComponent>(InputComponent);
FEnhancedInputActionValueBinding* MoveActionBinding = &EnhancedInputComponent->BindActionValue(InputMove);
return MoveActionBinding->GetValue().Get<FVector2D>().Y; // MoveForward 값
}
위의 코드는 다음과 같이 사용할 수도 있습니다.
.h
/** 이동 입력 액션 */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
class UInputAction* InputMove;
/**
* 캐릭터의 이동 InputAction과 그에 대응하는 값 사이의 매칭을 저장한 구조체입니다.
* UPROPERTY()를 사용할 수 없는 구조체입니다.
*/
struct FEnhancedInputActionValueBinding* MoveActionBinding;
.cpp
void APRPlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
...
EnhancedInputComponent = Cast<UEnhancedInputComponent>(PlayerInputComponent);
if(EnhancedInputComponent)
{
// 이동
EnhancedInputComponent->BindAction(InputActions->InputMove, ETriggerEvent::Triggered, this, &APRPlayerCharacter::Move);
MoveActionBinding = &EnhancedInputComponent->BindActionValue(InputActions->InputMove); // 이동 InputAction의 입력 값을 바인딩합니다.
}
}
float APRPlayerCharacter::GetMoveForward() const
{
return MoveActionBinding->GetValue().Get<FVector2D>().Y; // MoveForward 값
}
'Unreal Engine > C++' 카테고리의 다른 글
[Unreal Engine C++] 에디터의 디테일 패널에서 속성을 수정할 때 호출되는 함수 PostEditChangeProperty / PostEditChangeChainProperty (1) | 2024.07.12 |
---|---|
[Unreal Engine C++] EnhancedInput System으로 게임패드와 키보드 입력 장치 구분하기 (0) | 2024.04.09 |
[Unreal Engine C++] C++에서 인터페이스 변수 사용하기 (0) | 2024.01.12 |
[Unreal Engine C++] Widget Animation Delegate (1) | 2024.01.09 |
[Unreal Engine 4 C++] TimeStop (시공단열/초산 회피) (0) | 2023.08.02 |