관리 메뉴

Mini

[UE5] 향상된 입력 사용방법 본문

UE5

[UE5] 향상된 입력 사용방법

Mini_96 2024. 5. 25. 00:12

1.data asset상속받고, 입력데이터를 만든다.

여기 입력들 목록을 저장할것임.

ex) 이동, 공격, 스킬1, 스킬 2 ...

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "AuraInputConfigData.generated.h"

class UInputAction;
/**
 * 
 */
UCLASS()
class AURA_API UAuraInputConfigData : public UDataAsset
{
	GENERATED_BODY()

public:
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TObjectPtr<UInputAction> InputMove;
	//UInputAction* InputAction; 사용하지말것!

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TObjectPtr<UInputAction> InputAction2;
	
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TObjectPtr<UInputAction> InputAction3;
};

2. 상속받은 bp 클래스도 만들어줘야 컨트롤러에서 집어넣을수있음

 

3. 인풋액션을 만든다.

 

4. 데이터에서 매핑해주기

 

5. IMC 만들고 실제 키 입력들을 어떻게 처리할지 매핑해주기

 

6.  컨트롤러 cpp에서 작업

BP에서 선택해주기위해 멤버변수 2개 박아주기 (IMC, Data)

private:
	//BP에서 IMC 선택해주기 위함
	UPROPERTY(EditAnywhere,Category="Input")
	TObjectPtr<UInputMappingContext> AuraContext;

	//IMC에서 설정한 함수들 구현!!
	//UPROPERTY(EditAnywhere,Category="Input")
	//TObjectPtr<UInputAction> MoveAction;
	void Move(const FInputActionValue& InputActionValue);
	

	//인풋들을 Data들로 관리하기위함(점프,큐,스킬 등..)
	//BP > MoveActions에 박아주면 됨.
	UPROPERTY(EditAnywhere,Category="Input")
	TObjectPtr<UAuraInputConfigData> InputActions;

 

 

7. SetupInputComponent 함수 구현!!

빙의시, 자동호출되는 함수 => 여기서 키매핑을 하고 넘겨줘야됨!

void AAuraPlayerController::SetupInputComponent()
{
	Super::SetupInputComponent(); // 부모 클래스의 SetupInputComponent() 함수 호출

	// InputComponent를 UEnhancedInputComponent 형으로 변환하고 검사합니다.
	//Get 인핸스드 인풋 컴포넌트
	UEnhancedInputComponent* EnhancedInputComponent = CastChecked<UEnhancedInputComponent>(InputComponent);

	// MoveAction이 발생할 때 AAuraPlayerController 클래스의 Move() 함수를 바인딩합니다.
	//옵션 : 트리거(누르고있을때), 컴플리트(눌렀다 뗏을때)
	//특정키가(에디터IMC에서 설정한) 눌럿을때, Data 목록 중 Move함수를 실행해라.
	EnhancedInputComponent->BindAction(InputActions->InputMove, ETriggerEvent::Triggered, this, &AAuraPlayerController::Move);
}

 

8. Move함수 구현

void AAuraPlayerController::Move(const FInputActionValue& InputActionValue)
{
	// 입력 축 벡터를 가져옵니다. 이 벡터는 플레이어의 움직임 방향을 나타냅니다.
	const FVector2D InputAxisVector = InputActionValue.Get<FVector2D>();

	// 플레이어 컨트롤러의 회전 값을 가져옵니다.
	const FRotator Rotation = GetControlRotation();

	// Yaw (수평) 회전만을 고려하는 회전을 생성합니다.
	const FRotator YawRotation(0.f, Rotation.Yaw, 0.f);

	// Yaw 회전을 기준으로 전방과 오른쪽 방향 벡터를 계산합니다.
	const FVector ForwardDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::X);
	const FVector RightDirection = FRotationMatrix(YawRotation).GetUnitAxis(EAxis::Y);

	// 조종 중인 Pawn(캐릭터)이 있는지 확인합니다.
	if (APawn* ControlledPawn = GetPawn<APawn>())
	{
		// Pawn에게 계산된 방향과 입력 축 벡터에 따른 움직임 입력을 추가합니다.
		ControlledPawn->AddMovementInput(ForwardDirection, InputAxisVector.Y);
		ControlledPawn->AddMovementInput(RightDirection, InputAxisVector.X);
	}
}

 

8. 컨트롤러 BP에서 변수에 값 넣어주기