기존 입력 시스템 vs. Enhanced Input System
기존 입력 시스템은 입력 관련 설정을 해둔 뒤에 게임 로직에서 입력 값을 처리한다
그에 따라 게임 플레이 중에 플레이어의 키세팅 변경에 대응이 불가능하다
그래서 플레이어의 입력 관련 설정을 플레이 중에도 변경 가능한 것이
Enhanced Input System이다
Enhanced Input System의 동작
사용자의 입력 데이터를 최종 함수에 매핑하는 과정을 체계적으로 구성한다
입력을 처리하는 주체는 Input Action이고
입력과 액션이 맵핑하는 것이 Input Mapping Context이다
Input Action에서는 들어온 입력을 어떻게 재가공(Modifier)하고
어떻게 입력 이벤트를 활성화(Trigger)할지의 설정을 진행한다
마지막으로는 게임 로직에서 작성한 특정 함수와 바인드를 진행한다
- 플랫폼에 따른 다양한 입력 장치의 설정이 가능하다
ex) 게임 패드용 입력 매핑 컨텍스트, 키보드용 입력 매핑 컨텍스트,...
- 입력 값의 변환(Modifier)
ex) AD/WS 입력 값을 Y축과 X축으로 변경, 값의 반전 처리,...
- 이벤트 발생 조건의 상세 설정(Trigger)
ex) 일반 버튼인가, 축 이동인가, 일정 이상 눌려야 하는가,...
Enhanced Input System 사용법
1) Enhanced Input System 플러그인과 모듈 추가
플러그인 추가는 .uproject 파일을 수정해야 한다
모듈 추가는 Source > 원하는 모듈 폴더 > .Build.cs 파일을 수정해야 한다
// StudyProject.uproject
{
"FileVersion": 3,
"EngineAssociation": "5.1",
"Category": "",
"Description": "",
"Modules": [
{
"Name": "StudyProject",
"Type": "Runtime",
"LoadingPhase": "Default",
"AdditionalDependencies": [
"Engine",
"CoreUObject"
]
}
],
"Plugins": [
{
"Name": "ModelingToolsEditorMode",
"Enabled": true,
"TargetAllowList": [
"Editor"
]
},
{
"Name": "EnhancedInput",
"Enabled": true
}
]
}
// StudyProject.Build.cs
...
public class StudyProject : ModuleRules
{
public StudyProject(ReadOnlyTargetRules Target) : base(Target)
{
...
PublicDependencyModuleNames.AddRange(new string[] {
...
// Enhanced Input
"EnhancedInput",
});
...
}
}
2) InputAction 생성
에셋을 생성하기 전 충돌이나 헷갈릴 수 있는
Third Person Character의 InputAction 애셋 삭제 후 진행을 하는 것이 좋다
InputAction을 생성하고
Value Type을 통해 본인이 Axis Mapping, Action Mappiong을 설정할 수 있다
일반적으로는 상하좌우의 이동을 하는 경우에는 Vector2D를 지정하면 된다
3) InputConfig 생성
새 C++ 클래스 > DataAsset 부모 클래스를 만들어
“SInputConfig”를 만들어서 InputAction을 묶음으로 관리하는 것이 좋다
InputConfigData는 레벨과 폰에 따라 추가적으로 만들기도 한다
이렇게 만든 클래스를 상속받아 블루프린트 클래스로 쉽게 사용하면 된다
물론, InputAction을 추가할 때마다 SInputConfig 헤더파일에 속성을 추가해야 한다
// SInputConfig.h
#pragma once
#include "CoreMinimal.h"
#include "Engine/DataAsset.h"
#include "SInputConfigData.generated.h"
class UInputAction;
/**
*
*/
UCLASS()
class STUDYPROJECT_API USInputConfig : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadOnly)
TObjectPtr<UInputAction> Move;
};
4) InputMappingContext 생성
InputMappingContext를 통해 InputAction과 키를 맵핑하면 된다
5) 입력 조작이 필요한 클래스 속성으로 넣기
// SPlayerCharacter.h
...
UCLASS()
class STUDYPROJECT_API ASPlayerCharacter : public ASCharacter
{
GENERATED_BODY()
...
protected:
...
UPROPERTY(EditAnywhere, BlueprintReadOnly, meta=(AllowPrivateAccess))
TObjectPtr<USInputConfig> PlayerCharacterInputConfig;
UPROPERTY(EditAnywhere, BlueprintReadOnly, meta=(AllowPrivateAccess))
TObjectPtr<UInputMappingContext> PlayerCharacterInputMappingContext;
};
6) 블루프린트에서 설정해 주기
'게임 엔진 > [코드조선] 언리얼' 카테고리의 다른 글
언리얼 View - Control Rotation (0) | 2024.05.14 |
---|---|
언리얼 Character - Character 클래스 생성 (0) | 2024.05.13 |
언리얼 Character - Pawn vs. Character (0) | 2024.05.13 |
언리얼 Pawn - 애니메이션 기초 설정 (0) | 2024.05.13 |
언리얼 Pawn - Pawn 조작 (0) | 2024.05.13 |