Player의 입력은 Controller에서 처리하게 되어 있다.
입력이 Mouse가 될수도 Keyboard가 될 수도 레벨에 따라서 입력에 따라서 결과가 달라질 수 있으므로
따로 관리하기 위한 Class이다.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameMode.h"
#include "SpartaGameMode.generated.h"
UCLASS()
class SPARTAPROJECT_API ASpartaGameMode : public AGameMode
{
GENERATED_BODY()
public:
ASpartaGameMode();
};
ASpartaGameMode::ASpartaGameMode()
{
DefaultPawnClass = ASpartaCharacter::StaticClass();
PlayerControllerClass = ASpartaPlayerController::StaticClass();
}
게임모드가 생성될시 PlayerControllerClass에 등록한다.

- Bool(참/거짓)
- 단순 On/Off 토글 입력에 사용된다.(ex 점프, 공격, 스프린트)
- Axis1D(1차원 축 값)
- 단일 축 (-1 ~ 1)의 정규값을 받으며 패드에서 가속페달 혹은 전진 후진 값 같은 것에 사용된다.
- Axis2D(2차원 축 값)
- X,Y두 축을 동시 사용해야 할 경우 이용된다.
- Ex) WASD, 마우스 이동 (가로 , 세로)
- Axis3D(3차원 축 값)
- 세 축을 동시 처리한다.
- Ex) 비행 시뮬레이션
- Presed Trigger : 키를 누르는 순간에 동작
- Hold Trigger : 키를 일정 시간 눌렀을 때 동작
- Released Trigger : 키를 땔 때 동작
- Scale : 입력값에 배율을 곱한다.(Mouse 이동속도 2배)
- Invert : 입력값 반전(상하 반전 카메라)
- DeadZone : 임계값보다 작은 값은 무시한다.
앞/뒤, 왼쪽/오른쪽만 이동하면 되기에 ValueType은 Axis2D로 설정한다.
IA_Move는 항상 활성화 된 상태에서 WASD 입력만으로 동ㅈ가해야 하므로 트리거나 모디파이어가 필요하지 않다 Shift 키를 눌러야만 이동 가능 같은 조건이 없다면 필요없다.

Swizzle Input AxisValue
입력 축을 변환하거나, 재구성하는 기능이다. 언리얼에서 XYZ축 중 하나로 매핑한다. Swizzle은 이 값이 올바른 축에 맞지 않을 경우, 재배치하거나 변환하게 해준다.

#pragma once
#include "CoreMinimal.h"
#include "GameFramework/PlayerController.h"
#include "SpartaPlayerController.generated.h"
class UInputMappingContext;
class UInputAction;
UCLASS()
class SPARTAPROJECT_API ASpartaPlayerController : public APlayerController
{
GENERATED_BODY()
public:
ASpartaPlayerController();
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputMappingContext* InputMappingContext;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* MoveAction;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* JumpAction;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* LookAction;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Input")
UInputAction* SprintAction;
virtual void BeginPlay() override;
};
#include "EnhancedInputSubsystems.h" // Enhanced Input System의 Local Player Subsystem을 사용하기 위해 포함
ASpartaPlayerController::ASpartaPlayerController()
: InputMappingContext(nullptr),
MoveAction(nullptr),
JumpAction(nullptr),
LookAction(nullptr),
SprintAction(nullptr)
{
}
void ASpartaPlayerController::BeginPlay()
{
Super::BeginPlay();
// 현재 PlayerController에 연결된 Local Player 객체를 가져옴
if (ULocalPlayer* LocalPlayer = GetLocalPlayer())
{
// Local Player에서 EnhancedInputLocalPlayerSubsystem을 획득
if (UEnhancedInputLocalPlayerSubsystem* Subsystem = LocalPlayer->GetSubsystem<UEnhancedInputLocalPlayerSubsystem>())
{
if (InputMappingContext)
{
// Subsystem을 통해 우리가 할당한 IMC를 활성화
// 우선순위(Priority)는 0이 가장 높은 우선순위
Subsystem->AddMappingContext(InputMappingContext, 0);
}
}
}
}