묻공러
언리얼 Character - Enhanced Input System
묻공러
묻지마공부
묻공러
전체
오늘
어제
  • 분류 전체보기 (521) N
    • C (54)
      • [코드조선] C 핵심 (35)
      • [언어본색] C 기초 (19)
    • C++ (72)
      • [루키스] C++ (9)
      • [루키스] 콜백함수 (6)
      • [루키스] STL (8)
      • [루키스] Modern C++ (11)
      • [노코프] C++ (10)
      • [노코프] Tips (16)
      • [일지] C++ (12)
    • C# (20) N
      • [루키스] C# (9)
      • [루키스] 자료구조 (3)
      • [루키스] 실전 문법 (8) N
    • 자료구조 & 알고리즘 (50)
      • [코드조선] C 자료구조 & 알고리즘 (6)
      • [합격자되기] C++ 코딩테스트 (12)
      • [루키스] C++ 자료구조 & 알고리즘 (32)
    • CS (69)
      • [널널한 개발자] CS 개론 (19)
      • [혼자 공부하는] 컴퓨터 구조 (16)
      • [혼자 공부하는] 운영체제 (18)
      • [널널한 개발자] 네트워크 (16)
    • 게임 그래픽스 (46)
      • [전북대] OpenGL (25)
      • [일지] DirectX (21)
    • 게임 엔진 - 언리얼 (123)
      • [코드조선] 언리얼 (53)
      • [코드조선] 언리얼 데디서버 (8)
      • [일지] 언리얼 (59)
      • [일지] 언리얼 (2) (3)
    • 게임 엔진 - 유니티 (14) N
      • [최적화] 유니티 (4)
      • [루키스] 유니티 (10) N
    • 게임 서버 (17)
    • 게임 수학 & 물리 (19)
      • 게임 수학 (12)
      • 게임 물리 (7)
    • GIT & GITHUB (4)
    • 영어 (18)
      • [The Outfit] 대본 공부 (11)
      • the others (7)
    • 그 외 (14)
      • In (5)
      • Out (5)
      • Review (4)

인기 글

최근 글

hELLO · Designed By 정상우.
게임 엔진 - 언리얼/[코드조선] 언리얼

언리얼 Character - Enhanced Input System

2024. 5. 13. 10:40

기존 입력 시스템 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
'게임 엔진 - 언리얼/[코드조선] 언리얼' 카테고리의 다른 글
  • 언리얼 View - Control Rotation
  • 언리얼 Character - Character 클래스 생성
  • 언리얼 Character - Pawn vs. Character
  • 언리얼 Pawn - 애니메이션 기초 설정
묻공러
묻공러
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.