728x90
언리얼 엔진: 입력 바인딩 및 콜백 함수 구현
안녕하세요!
이번 글에서는 언리얼 엔진에서 Hero Character 클래스에 입력 바인딩을 구현하고, Move와 Look 액션을 처리하는 콜백 함수를 작성하는 방법을 다룹니다. 이 과정을 통해 캐릭터가 사용자 입력에 반응하도록 설정할 수 있습니다.
1. Hero Character 클래스에 입력 데이터 자산 참조 추가
1) 입력 데이터 자산 참조 변수 추가
Hero Character 클래스에서 입력 데이터 자산(Input Config Data Asset
)을 참조합니다. Data Asset은 하드 레퍼런스 방식으로 참조합니다.
헤더 파일 수정
// HeroCharacter.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Data_InputConfig.h"
#include "HeroCharacter.generated.h"
UCLASS()
class YOURPROJECT_API AHeroCharacter : public ACharacter
{
GENERATED_BODY()
private:
UPROPERTY(EditDefaultsOnly, Category="Input")
TObjectPtr<const UData_InputConfig> InputConfigDataAsset;
// 콜백 함수 선언
void Input_Move(const FInputActionValue& InputActionValue);
void Input_Look(const FInputActionValue& InputActionValue);
protected:
virtual void SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) override;
};
2) SetupPlayerInputComponent 함수 오버라이드
SetupPlayerInputComponent
를 오버라이드하여 입력 데이터를 바인딩합니다.
2. 입력 바인딩 구현
1) SetupPlayerInputComponent 함수 정의
CPP 파일 작성
// HeroCharacter.cpp
#include "HeroCharacter.h"
#include "WarriorInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "WarriorGameplayTags.h"
void AHeroCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
// Input Data Asset 확인
checkf(InputConfigDataAsset, TEXT("Forgot to assign a valid Input Config Data Asset."));
// 로컬 플레이어와 서브시스템 참조 가져오기
const APlayerController* PlayerController = Cast<APlayerController>(GetController());
if (!PlayerController) return;
const ULocalPlayer* LocalPlayer = PlayerController->GetLocalPlayer();
const UEnhancedInputLocalPlayerSubsystem* Subsystem = ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(LocalPlayer);
checkf(Subsystem, TEXT("Enhanced Input Subsystem is null."));
// 매핑 컨텍스트 추가
Subsystem->AddMappingContext(InputConfigDataAsset->DefaultMappingContext, 0);
// WarriorInputComponent 캐스팅
UWarriorInputComponent* WarriorInputComponent = CastChecked<UWarriorInputComponent>(PlayerInputComponent);
// Move 입력 바인딩
WarriorInputComponent->BindNativeInputAction(
InputConfigDataAsset,
WarriorGameplayTags::InputTag_Move,
ETriggerEvent::Triggered,
this,
&AHeroCharacter::Input_Move
);
// Look 입력 바인딩
WarriorInputComponent->BindNativeInputAction(
InputConfigDataAsset,
WarriorGameplayTags::InputTag_Look,
ETriggerEvent::Triggered,
this,
&AHeroCharacter::Input_Look
);
}
2) Move 입력 콜백 함수 구현
void AHeroCharacter::Input_Move(const FInputActionValue& InputActionValue)
{
const FVector2D MovementVector = InputActionValue.Get<FVector2D>();
const FRotator MovementRotation(0.0f, Controller->GetControlRotation().Yaw, 0.0f);
if (MovementVector.Y != 0.0f)
{
const FVector ForwardDirection = FRotationMatrix(MovementRotation).GetUnitAxis(EAxis::X);
AddMovementInput(ForwardDirection, MovementVector.Y);
}
if (MovementVector.X != 0.0f)
{
const FVector RightDirection = FRotationMatrix(MovementRotation).GetUnitAxis(EAxis::Y);
AddMovementInput(RightDirection, MovementVector.X);
}
}
3) Look 입력 콜백 함수 구현
void AHeroCharacter::Input_Look(const FInputActionValue& InputActionValue)
{
const FVector2D LookAxisVector = InputActionValue.Get<FVector2D>();
if (LookAxisVector.X != 0.0f)
{
AddControllerYawInput(LookAxisVector.X);
}
if (LookAxisVector.Y != 0.0f)
{
AddControllerPitchInput(LookAxisVector.Y);
}
}
3. 에디터에서 입력 데이터 자산 설정
Hero Character 열기
- 블루프린트 편집기로 열기
- Character Data 카테고리에서
InputConfigDataAsset
변수 선택
Input Data Asset 할당
DE_InputConfig
Data Asset을 할당
컴파일 및 저장
4. 결과 확인
플레이 실행
- 캐릭터가
Move
입력에 따라 움직이는지 확인 Look
입력에 따라 시점이 변경되는지 확인
- 캐릭터가
디버깅
- 예상대로 작동하지 않는 경우
checkf
매크로에서 오류 메시지를 확인
- 예상대로 작동하지 않는 경우
5. 결론
이번 글에서는 Hero Character
클래스에 입력 바인딩을 구현하고, 이동 및 시점 변경 기능을 설정했습니다. 이러한 설정은 입력 시스템과 캐릭터의 상호작용을 완성시키는 핵심 요소입니다. 다음에는 캐릭터에 애니메이션 블루프린트를 추가하여 움직임에 생동감을 더하는 방법을 알아보겠습니다.
728x90
'Unreal Engine' 카테고리의 다른 글
Unreal Engine의 generated.h 에 대하여 (1) | 2024.11.21 |
---|---|
Lyra Gameplay Ability System & Enhanced Input 3 (0) | 2024.11.14 |
Lyra Gameplay Ability System & Enhanced Input 2 (0) | 2024.11.14 |
Lyra Gameplay Ability System & Enhanced Input 1 (0) | 2024.11.13 |
언리얼 프로젝트 빌드 구성 (0) | 2020.12.12 |