UE5

Enhanced Input System Input Binding Process (향상된 인풋 시스템 인풋 바인딩 과정)

게임 개발 2024. 9. 16. 16:19

 

1. Native Gameplay Tags

- Define input tags(입력 태그 정의)

 
입력 태그를 정의해줍니다.
입력 태그는 점프, 이동, 발사 등 다양한 입력 동작을 나타내는 식별자입니다.
 
이러한 입력 태그는 소스 파일에서 다음과 같은 형태로 정의해줄 수 있습니다.

// 해더 파일
class UInputAction;
class UInputMappingContext;

USTRUCT(BlueprintType)
struct  FLucyInputActionConfig
{
	GENERATED_BODY()

public:
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (Categories = "InputTag"))
	FGameplayTag InputTag;
	
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TObjectPtr<UInputAction> InputAction;
};


/**
 * 
 */
UCLASS()
class LUCY_API UDataAsset_InputConfig : public UDataAsset
{
	GENERATED_BODY()
	
public:
	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly)
	TObjectPtr<UInputMappingContext> DefaultMappingContext;

	UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, meta = (TitileProperty = "InputAction"))
	TArray<FLucyInputActionConfig> NativeInputActions;

	TObjectPtr<UInputAction> FindNativeInputActionByTag(const FGameplayTag& InInputTag) const;
};

 
이러한 태그를 이용한 방식인 향상된 인풋 시스템은
원시 입력 이벤트를 추상화하여 코드를 읽고 유지보수하기 쉽게 만듭니다.
예를 들어, 특정 키 코드 (w를 앞으로 움직이는 이동에 사용하는 것)를 확인하는 대신
MoveForward 같은 입력 태그를 사용합니다
 
ex)
 
 

  • "MoveForward" (앞으로 이동)
  • "MoveBackward" (뒤로 이동)
  • "Jump" (점프)
  • "Fire" (발사)
  • "Pause" (일시정지)
  • "Interact" (상호작용)

 
이러한 태그는 키보드, 마우스 버튼, 컨트롤러 입력 등 다양한 유형의 입력에 매핑될 수 있습니다.
 
 

2. Input Config Data Asset

- map input tag to input action (입력 바인딩 정의)

 
게임 플레이 태그를 이용할 수 있는 InputConfigDataAsset을 제작해주는 것을 말합니다.
입력 태그를 입력 동작에 매핑하는 것은 태그와 특정 이벤트를 연결하는 작업입니다.
이 매핑을 통해 원시 입력(예 : 키보드 입력이나 버튼 클릭)을 논리적인 게임 동작으로 추상화할 수 있습니다.
 
예시 매핑
 

  • "MoveForward" → W 키 (키보드) 또는 Left Stick Up (게임 컨트롤러)
  • "MoveBackward" → S 키 (키보드) 또는 Left Stick Down (게임 컨트롤러)
  • "Jump" → 스페이스바 (키보드) 또는 A 버튼 (게임 컨트롤러)
  • "Fire" → 마우스 왼쪽 버튼 또는 오른쪽 트리거 (게임 컨트롤러)

 
이는 구성 파일을 통해 엔진 내에서 직접 설정할 수 있습니다
(유니티 & 언리얼 엔진 모두 동일)
 
 

3. Custom Input Component

- define input binding methods (입력 콜백 정의)

 
입력 바인딩 방법은 입력 태그가 물리적 입력 장치와 연결되는 방식을 정의합니다.
일반적으로 코드 또는 게임 엔진의 입력 구성 시스템에서 설정됩니다.
 
입력 바인딩 유형 :
 

  • 키보드 바인딩: 특정 키를 입력 태그에 매핑.
  • 마우스 바인딩: 마우스 버튼과 움직임을 입력 태그에 매핑.
  • 컨트롤러 바인딩: 게임패드 버튼과 축을 입력 태그에 매핑.
  • 커스텀 입력 장치: 게임이 커스텀 컨트롤러를 지원하는 경우, 이러한 장치에도 입력 바인딩을 설정할 수 있습니다.

 
입력 바인딩 예시 코드:
 

if (Input.GetKey(KeyCode.W)) {
    // 앞으로 이동 동작
}
if (Input.GetButton("Fire1")) {
    // 무기 발사
}

 
Unity에서: Input.GetKey() 또는 Input.GetButton()을 사용하여 물리적인 키/버튼을 동작에 매핑할 수 있습니다.
 

PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);

Unreal Engine에서: 입력 설정에서 액션 매핑을 설정할 수 있습니다.
 
 
 

4. Binding Input

- define input callbacks

 
입력 콜백은 특정 입력 동작이 발생할 때 호출되는 함수입니다.
이 콜백은 입력 태그에 연결되며, 입력이 감지되면 적절한 동작을 수행합니다.
 
 
입력 콜백 예시:

  • OnJump() → 플레이어가 점프 버튼을 눌렀을 때 호출.
  • OnMoveForward() → 플레이어가 앞으로 이동할 때 호출.
  • OnFire() → 플레이어가 발사 버튼을 눌렀을 때 호출.

콜백 예시 코드:
 

void Update() {
    if (Input.GetKeyDown(KeyCode.Space)) {
        OnJump();
    }
}

void OnJump() {
    // 점프 로직 실행
}

Unity에서: Update() 함수 내에서 콜백을 정의할 수 있습니다.
 

PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);

 
Unreal Engine에서: 입력 바인딩 중 콜백이 연결됩니다.
 
 

5.Assingn assets in editor

- fill in assets needed in editor (에디터에서 필요한 자산 설정)
 
에디터는 입력 시스템을 지원하도록 설정되어야 합니다.
대부분의 게임 엔진(Unity 또는 Unreal)은 입력 매핑을 에디터 인터페이스에서 구성할 수 있게 해줍니다.
 
Unity에서 입력 구성 단계:

  1. Edit > Project Settings > Input Manager를 엽니다.
  2. 입력 축과 동작을 정의합니다.
  3. "MoveForward"나 "Jump" 같은 동작 이름을 지정합니다.
  4. 각 입력 태그에 대응하는 키나 버튼을 설정합니다.

Unreal Engine에서 입력 구성 단계:

  1. Edit > Project Settings > Input을 엽니다.
  2. Action MappingsAxis Mappings을 추가합니다.
  3. "Jump", "MoveForward" 등 태그를 정의합니다.
  4. 각 매핑에 원하는 키나 버튼을 할당합니다.

 
언리얼 에디터에서 향상된 인풋 시스템 설정 방법 :
1. Edit > Project Settings > Input 에서 
2. 사용자가 생성한 컴포넌트를 기본 입력 컴포넌트로 변경하면 된다.

 
 
 
 

요약된 워크플로우:

  1. 입력 태그를 정의하여 논리적인 게임 동작을 나타냅니다.
  2. 이 입력 태그를 특정 입력 동작에 매핑합니다 (키보드, 마우스 버튼, 컨트롤러 버튼).
  3. 입력 동작을 적절한 입력 장치에 바인딩합니다 (키보드, 마우스, 게임패드).
  4. 입력이 발생하면 콜백 함수가 호출되어 게임 로직을 실행합니다.
  5. 이 매핑을 게임 엔진의 에디터에서 구성하여 시스템이 입력 설정을 인식하도록 합니다.

 
이러한 방식으로 입력 시스템을 추상화하면 다양한 입력 장치와 설정에 쉽게 적응할 수 있는 게임을 만들 수 있습니다.