언리얼 5부터는 기존 입력 방식이 폐기되고 향상된 입력 시스템(Enhanced Input System)으로 변경되었다.
향상된 입력 시스템을 이해하기 위해서는 세 객체를 이해해야 한다.
1. Input Action : 입력 값을 반환하는 역할
2. Input Mapping Context : 키보드/마우스/게임패드 키 또는 버튼과 Input Action을 연결하는 역할
3. Player Controller : 사용자의 입력을 처리하는 객체
원리를 살펴보자면 다음과 같다.
1. ULocalPlayer로부터 Subsystem을 UEnhancedInputLocalPlayerSubsystem으로 변환한다.
2. Input Mapping Context와 연결한다.
3. EnhancedInputComponent와 Input Action을 연결한다.
이 과정을 PlayerController에서 해도 되고, 캐릭터에서 해도 된다.
그러나 단일 책임 원칙을 고려하면 입력은 컨트롤러에서 수행하는 것이 더 적절하다.


매핑할 때 0번을 넣는 이유는 캐릭터를 조종하는 나 자신은 항상 0번이기 때문이다.
BeginPlay에서 처리해봄직한 몇가지 기능들이 더 있는데, 입력을 받는 상태가 게임 모드인지, UI모드인지 구분하는 기능과
마우스 커서를 보이게 할건지 숨길건지 설정하는 기능도 여기서 설정해주면 좋다.

이제 동작과 함수를 연결하는 작업만 하면 끝인데,
이 때 SetupInputComponent 함수에서 이 작업을 처리한다.

바인딩할 함수는 반드시 매개변수로 const FInputActionValue& 타입이어야 한다.
해당 매개변수를 통해 bool, float, FVector2D, FVector3D 형태로 가공하여 입력을 처리할 수 있다.

해당 이동 방식은 좌우 회전만 고려한 이동방식이다.
로스트아크와 같은 탑뷰에 적합한 이동방식
이동은 준비가 끝났다.
캐릭터는 사실상 회전을 어떻게 할 것인지, 카메라는 어떻게 설정할 것인지, 카메라도 따라서 회전할 것인지 등과 같은
움직임을 어떻게 보여줄지에 대한 옵션만 조정한다.
에디터로 가서
1). GameMode
2). PlayerController
3). Character
클래스를 생성하고,
입력 탭에서
1). Input Mapping Context
2). Input Action
을 생성한다.

사전 작업이 끝날 때 까지 중간에 플레이 버튼을 눌러선 안된다. 기본 설정이 끝나기 전에 시작하면 프로그램 터진다.
레벨을 만들고 월드 설정에 내가 만든 게임 모드로 변경한다.

만약 위치를 못찾겠다면, 좌측 상단 메뉴 - 편집 - 프로젝트 세팅 - 맵&모드에서
기본 게임모드를 변경하면 된다.

1. 게임모드로 들어가서
1). PlayerController
2). Character
두 클래스를 내가 생성한 BP 클래스로 변경한다.

2. 플레이어 컨트롤러에서
1). Input Mapping Context
2). Input Action
지정한다.

3. Input Action으로 가서 값 타입을 Vector2D로 설정한다.

4. Input Mapping Context로 가서 인풋 액션과 키보드의 키를 매핑한다.

세부 디테일은 지금 설정하지 않는다.
이 상태에서 플레이 버튼을 누르고 WASD키를 누르면 카메라가 한 방향으로 이동하는 것을 확인할 수 있어야 한다.
이동을 확인했으면 캐릭터에 메시를 부여하고 카메라 설정을 해준다.

여기까지가 향상된 입력 시스템의 이론의 전부다.
PlayerController에서 InputMappinContext와 InputAction을 지정하고
InputAction에서는 값타입을
InputMappingContext에서는 키설정을 세팅한다.
이 이후부터는 입력 키에 따라 이동 방향을 다르게 설정해주는 문제와 캐릭터와 카메라 회전을 적용할지 말지 선택하는 디테일한 문제만 남았다.
5. Character에서 메시 설정을 해준다.

게임 엔진에서 자체적으로 제공하는 메시를 쓴다.
만약 아무것도 안보인다면, 메시 - 스켈레탈 메시 에셋 클릭 - 설정 버튼 클릭 - 엔진 콘텐츠 활성화 하면 엔진에서 제공하는 기본 에셋들을 확인할 수 있다.

다음은 카메라 설정인데
처음 언리얼을 사용하는 유저들은 카메라를 조작해야한다고 생각하는데, 사실 스프링 암(Spring Arm)이 본체다.
스프링 암을 눌러보면 뷰포트에 빨간 줄이 보이는데, 이 상태에서 편집해야 한다.
왜냐면 스프링 암이 카메라의 부모 클래스이기 때문에, 부모 클래스의 크기/회전/위치를 수정하면 자식 클래스인 카메라도 그 영향을 받는다.

대충 스프링 암 길이 늘리고 각도를 높였다.
여기서 이제 건드려볼만한 옵션들을 살펴보자.
먼저 스프링 암 컴포넌트에서 카메라 회전 관련된 부분이다.
폰이 회전하면 카메라도 함께 돌아갈거냐를 설정한다.
리그오브레전드나 로스트아크처럼 캐릭터가 이동한다고 카메라도 휙휙휙 전환되지 않는 게임은 피치/요/롤 옵션을 꺼야 한다.
3D 게임 중 캐릭터 뒤 카메라에서 좌우 회전에 따라 카메라도 함께 움직일 때, 요를 통한 좌우 회전 정도 활성화하는게 일반적이다.

다음으로 볼만한 옵션은 캐릭터 무브먼트 컴포넌트인데,
여기서 무브먼트 방향으로 회전 조정 옵션을 활성화하면 내가 입력한 방향에 따라 캐릭터가 방향을 전환한다.

왼쪽으로 이동하면 캐릭터도 왼쪽 방향으로 전환하는 기능이다.
여기서 중요한 점은 회전 속도가 기본값이 360도인거 같은데, 기본 회전 값보다 더 크게 잡아서 회전을 적용하자.
540도 회전도 생각보다 빠른 회전이 아니다.
회전을 테스트하려면 키 입력에 따라 이동할 방향이 제대로 설정되어야 하므로
다시 Input Mapping Context를 연다.
여기서 모디파이어를 통해서 축 값을 수정하면 된다.

위 예시가 의미가 없는게, 월드 좌표를 어떻게 사용하고 있냐에 따라서 이 값들이 조금씩 바뀌어야 한다.
그래서 처음에 WASD 키를 눌러보고, 내 의도와 일치하는 방향의 키 값은 모디파이어를 하지 않는 상태에서 나머지 키 값들을 수정하는 형태로 간다.
여기서 나는 어느 키를 눌러도 모니터 안을 향해 나아가므로, W키가 정상적인 축을 가지고 있다.
그러면 S키는 반대 값이 들어가야 하므로 부정
D키는 축이 바뀌어야 하므로, 스위즐 입력 축 값
A키는 축도 바뀌고 값도 반대로 들어가야 하니 스위즐 입력 축 값 + 부정 이 된다.
축 값은 X든 Y든 어느 한 방향의 값이 계속 양수로 1이 들어오고 있는 개념이다.
이걸 음수로 바꿨다가 Y축으로 바꿨다가 하면서 조절하면 된다.

'Unreal Engine > 기능 구현' 카테고리의 다른 글
| [Unreal Engine 5] GAS 디버그 명령어 (0) | 2025.09.07 |
|---|---|
| [Unreal Engine 5] PrimitiveComponent의 충돌 체크 함수들 (0) | 2025.09.07 |
| [Unreal Engine 5] Post Process Highlight(포스트 프로세스 하이라이트) : 외곽선 효과 (0) | 2025.08.25 |
| [Unreal Engine 5] 마우스로 액터 호버링 (0) | 2025.08.25 |
| [Unreal Engine 5] 탑다운 방식 플레이어&카메라 기본 설정 (0) | 2025.08.25 |
