이전에 만든 PlayerBaseComponent를 부모로 PlayerMoveComponent C++ 클래스를 생성합니다.
이렇게 만들어진 PlayerMoveComponent 컴포넌트를 플레이어 액터에 붙여주겠습니다.
TPSPlayer.h public:에 playerMove 포인트변수 추가
UPROPERTY(VisibleAnywhere, Category = "Component")
class UPlayerBaseComponent* playerMove;
UPlayerMove클래스를 생성해 이 playerMove변수에 할당해 주겠습니다.
TPSPlyaer.cpp에 PlayerMoveComponet.h를 인클루드해주고
#include "PlayerMoveComponent.h"
생성자 맨 아래 CreateDefaultSubObject()함수를 이용합니다.
playerMove = CreateDefaultSubobject<UPlayerMoveComponent>(TEXT("PlayerMove"));
TPSPlayer.cpp 에 playerMove->SetupInputBinding(PlayerInput); 를 추가합니다.
void ATPSPlayer::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
auto PlayerInput = CastChecked<UEnhancedInputComponent>(PlayerInputComponent);
if (PlayerInput)
{
playerMove->SetupInputBinding(PlayerInput);
카메라 회전처리기능 옮기기
TPSPlayer.h헤더의 is_LookUp과 is_Turn과 Turn(), LookUP()함수 선언을 Ctrl-X PlayerMoveComponent.h public: 로 옮깁니다.
#pragma once
#include "CoreMinimal.h"
#include "PlayerBaseComponent.h"
#include "PlayerMoveComponent.generated.h"
/**
*
*/
UCLASS()
class TPS_API UPlayerMoveComponent : public UPlayerBaseComponent
{
GENERATED_BODY()
public:
UPlayerMoveComponent();
UPROPERTY(EditDefaultsOnly, Category = "Input")
class UInputAction* ia_LookUp;
UPROPERTY(EditDefaultsOnly, Category = "Input")
class UInputAction* ia_Turn;
void Turn(const struct FInputActionValue& inputValue);
void LookUp(const struct FInputActionValue& inputValue);
virtual void SetupInputBinding(class UEnhancedInputComponent* PlayerInput) override;
};
cpp의 구현부도 TPSPlayer.cpp에서 짤라서 PlayerMoveComponent.cpp로 옮겨주고 UPlayerMoveComponent::를 변경해줍니다. EnahncedInput을 위한 헤더도 추가해줍니다.
내친김에 Input_Action들도 FObjectFinder()를 이용해 연결해줍니다. 위치는 각자 다르므로 Input_Action을 Ctrl+C해서 복사해 옵니다. static을 사용합니다.
#include "PlayerMoveComponent.h"
#include "EnhancedInputComponent.h"
#include "InputAction.h"
UPlayerMoveComponent::UPlayerMoveComponent()
{
static ConstructorHelpers::FObjectFinder<UInputAction> iaTurn(TEXT("InputAction'/Game/Input/IA_Turn.IA_Turn'"));
if (iaTurn.Succeeded())
{
ia_Turn = iaTurn.Object;
}
static ConstructorHelpers::FObjectFinder<UInputAction> iaLookUp(TEXT("InputAction'/Game/Input/IA_LookUP.IA_LookUP'"));
if (iaLookUp.Succeeded())
{
ia_LookUp = iaLookUp.Object;
}
}
void UPlayerMoveComponent::SetupInputBinding(class UEnhancedInputComponent* PlayerInput)
{
PlayerInput->BindAction(ia_Turn, ETriggerEvent::Triggered, this, &UPlayerMoveComponent::Turn);
PlayerInput->BindAction(ia_LookUp, ETriggerEvent::Triggered, this, &UPlayerMoveComponent::LookUp);
}
void UPlayerMoveComponent::Turn(const FInputActionValue& inputValue)
{
float value = inputValue.Get<float>();
me->AddControllerYawInput(value);
//PRINT_LOG(TEXT("%f"),value)
}
void UPlayerMoveComponent::LookUp(const FInputActionValue& inputValue)
{
float value = inputValue.Get<float>();
me->AddControllerPitchInput(value);
//PRINT_LOG(TEXT("%f"), value)
}
컴파일후 BP_TPSPlayer를 열어보면 PlayerMove 컴포넌트가 추가되었고 InputAction변수
InputAction변수가 잘 지정되었는지 확인합니다.
'언리얼게임프로젝트 > TPS C++' 카테고리의 다른 글
Character 이동기능 옮기기 ActorComponent (0) | 2025.04.01 |
---|---|
ActorComponent Movement, InputComponent (1) | 2025.04.01 |
Actor Class 검색 방법, EnemyManager, EnemyFactory (0) | 2025.04.01 |
프로젝트 준비하기 UClass, UObject, CDO (0) | 2025.03.25 |