플레이어가 캐릭터를 조작하려면
어떤 버튼을 입력할지 IMC(Input Mapping Context)를 통해 정하고 매핑을 해준다. -> 스위치 역할
어떤 행동과 연결할지 중간에 행동을 IA(Input Action)을 통해 추상적으로 정한다. -> 전선 역할
SpartaPlayerController.h
#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;
};
- 블루프린트에서 IA와 IMC를 전부 입력한 후 위와같이 멤버변수를 만들어준다.
SpartaPlayerController.cpp
#include "SpartaPlayerController.h"
#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);
}
}
}
}
- IMC 활성화코드 작성
- 언리얼엔진5의 Enhanced Input System은 Local Player Subsystem 을 통해 Input Mapping Context를 활성화하거나 비활성화 한다.
- Local Player SubSystem
- 게임이 실행되면 언리얼은 각 Player를 표현하기 위해 Local Player 객체를 생성한다.
- 싱글플레이어 상황에서는 하나의 Local Player
- 멀티플레이어 상황에서는 플레이어 수 만큼의 Local Player가 생성된다.
- UEnhancedInputLocalPlayerSubsystem은 Local Player에 부착되어, 해당 플레이어가 사용할 입력 매핑 (IMC)을 관리한다.
- 이를 통해, 플레이 중에 동적으로 다른 IMC를 추가, 제거하여 입력 모드를 전환 할 수 있다.
- 게임이 실행되면 언리얼은 각 Player를 표현하기 위해 Local Player 객체를 생성한다.
- GetLocalPlayer()
- 현재 PlayerController가 관리하는 Local Player를 반환한다.
- GetSubsytem<UEnhancedInputLocalPlayerSubsystem>()
- 해당 Local Player에 부착된 Enhanced Input Subsystem을 반환한다.
- 이를 통해 AddMappingContext나 RemoveMappingContext 등을 호출하여 입력매핑을 동적으로 제어할 수 있다.
- AddMappingContext()
- 주어진 IMC를 Subsystem에 추가하여 입력 매핑을 활성화한다.
- SpartaInputMappingContext : 활성화할 IMC.
- 0 : 우선순위, 낮을수록 높은 우선순위를 가진다.
- 이 함수를 여러 번 호출해 여러 IMC를 활성화할 수도 있다.
- 우선순위를 달리 부여해, 특정 IMC가 다른 IMC보다 우선순위가 높도록 설정할수도 있다.
'언리얼엔진5 공부' 카테고리의 다른 글
| 데미지 처리 함수 (1) | 2025.10.14 |
|---|---|
| 언리얼엔진5 공부언리얼엔진 C++ 챕터2 - 3. 캐릭터 동작 구현과 입력 처리하기 (0) | 2025.09.24 |
| 언리얼엔진 C++ 챕터2 - 1. Character_클래스를_활용한_캐릭터_구현하기 (2) | 2025.09.19 |
| 언리얼엔진 C++ 챕터1 - 5. C++ 클래스와 리플렉션 시스템 활용하기 (0) | 2025.09.18 |
| 언리얼엔진 C++ 챕터1 - 4. Tick 함수로 Actor의 Transform 조정하기 (1) | 2025.09.17 |