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에서 변수에 값 넣어주기
'UE5' 카테고리의 다른 글
[UE5] 인터페이스에 값대입하는 방법 (0) | 2024.05.28 |
---|---|
[UE5] 리플렉션 시스템 (0) | 2024.05.24 |
[UE5] 비행기만들기, 이동 회전 구현 (0) | 2024.05.13 |
[UE5] 머태리얼, 텍스쳐 (0) | 2024.05.13 |
[UE5] 가고일 물리반응 끄기, trigger에 붙여서 같이 내려가도록 구현 (0) | 2023.09.18 |