3인칭 시점 게임모드
Input Action, Input Mapping Context, ModifierTrigger
입력을 받기 위해서는 먼저 축이나 액션을 추가하고 그 입력이 어떤 입력인지 이름을 정한다. 그리고 그 이름으로 동작할 키 입력을 추가해 주는데 이 과정을 매핑이라고 부른다.
그 다음에는 클래스에서 입력을 받아서 동작할 함수를 구현하고 이 함수와 입력 매핑을 연결해 준다. 이 과정을 바인딩이라고 한다.
사전 세팅
프로젝트세팅에서 Enhanced Input이 활성화 상태인지 체크하기 - Default Player Input Class, Default Input Component Class
만약 Input이 뜨지 않는다면 Enhanced Input 플러그인 활성화하기.
Game Mode Base로 블루프린트 생성 BP_MYGameMode
Character 블루프린트 생성(캐릭터용) BP_MYCharacter
게임모드 블루프린트를 열어서 Classes - Default Pawn Class를 BP_MYCharacter로 바꾸어준다. 저장.
월드세팅에서 Game Mode - GameMode Override를 방금만든 BP_MYGameMode로 바꾸어주기.
GameMode가 바뀌면 앞서 설정한 Default Pawn Class도 바뀐다.
캐릭터 블루프린트로 가서 Mesh에 원하는 캐릭터(스켈레탈매쉬) 넣어주기.
* 캐릭터 위치 맞추는 Tip
캡슐을 선택하고 디테일 창에 가면 Shape - Capsule Halr Height 수치를 볼 수 있다.
캡슐은 그리드 기준으로 반만 올라온 상태이기 때문에 캐릭터의 피봇이 발 밑 바닥에 달려있다면 z축으로 Capsule Halr Height 수치만큼 내려주면 된다.
Arrow component는 정면방향을 가르키므로 캐릭터를 회전해서 맞춰준다.
* 크기에 따라 캡슐 크기 수정해주기. Character Movement 디테일 창에서 움직임과 관련된 속성 설정해주기.
카메라를 달기 위해 첫번째로 SpringArm 컴포넌트를 추가해준다.
* SpringArm : 부모 스페이스의 특정 위치에서 자손을 유지를 시도하려는 컴포넌트
SpringArm이 캡슐 아래 들어가도록 맞춰주고 Spring Arm 아래 카메라를 달아준다.
카메라의 위치는 Play 버튼을 눌러 화면을 보고 추가로 원하는 뷰가 나오게 위치 조절 가능.
애니메이션 블루프린트 생성. ABP_MYAnim
이번 실습에서는 애니메이션 시퀀스가 이미 있는 마네퀸을 사용할 것이기 때문에 마네퀸 스켈레톤을 선택하여 생성해준다.
Blend Space 생성. BS_MYBlend
같은 스켈레톤을 잡고 생성해준다.
Legacy 버전의 Blend Space 1D를 이전에 사용했었다.
다시 캐릭터 블루프린트로 돌아가 컴포넌트 창 맨 위에 MY_Character를 선택하고, Animation - Anim Class에 ABP_MYAnim 를 넣어준다.
Input Action을 3개 만들어준다.
* InputAction (입력 액션)은 액션이 할당되는 부분이다. InputAction에서는 특정 키가 연결되지 않고, 역할에 대한 정보만을 구성하게 된다.
IA_MYMove, IA_MYJump, IA_MYLook
생성한 Input Action을 더블클릭해서 열면 디테일 창이 뜨는데,
Move 와 Look은 Action - Value Type을 Axis2D로 바꿔주고
Jump는 Digital(bool)로 세팅해준다.
예를 들면 Move의 경우 게임에서 대각선 앞으로 갈 때,
위로 가는 키와 옆으로 가는 키를 같이 누르면서 조절하기 때문에 Vector2D형태가 필요하고,
Jump 같은 경우에는 키를 한번 눌러 실행하는 것이기 때문에 Bool(boolean)과 같은 형태가 필요하다.
Axis3D(Vector)같은 경우는 상하좌우로 날라다니는 헬기 같은 것에 활용한다.
Input Mapping Context를 생성한다. IMC_MYAction
점프, 이동, 화면회전을 키보드와 마우스에 이어주게 되는데, 입력 매핑 컨텍스트 (InputMappingContext)는 사용자의 입력값을 만들어둔 인풋 액션과 바인딩해주는 역할을 한다.
*사용자는 여러개의 Input Mapping Context를 가질 수 있으며, 이들은 각각 우선순위가 있어 같은 키를 입력해도 어떤 액션이 나갈지를 지정할 수 있게 된다.
IMC를 열면 Mappings에 + 버튼을 눌러 앞서 만든 Input Action을 지정하고 Input Action별로 키 또는 마우스 움직임을 연결시켜줄 수 있다.
키를 여러개 연결하고 싶으면 Input Action을 넣은 프로퍼티 옆 + 버튼을 눌러준다.
그 중 MYMove의 경우 Modifiers를 추가하여 Swizzle Input Axis Values, Order는 YXZ를 설정해준다.
Swizzle Input Axis Values을 추가하므로 입력값이 들어가는 좌표를 설정해줄 수 있다.(Modifiers가 없다면 기본 XYZ의 순서이다.) 지금의 세팅에서 W의 경우 키를 누르면 Y값에 할당된다.
여기서 중요한건 아래 방향키와 왼쪽 방향키는 추가로 Modifiers를 하나 더 추가하고 Negate를 달아주는 것이다.
S같은 경우에는 W와 같이 Swizzle Input Axis Values를 설정하되, 추가로 Negate를 달아 값을 반전 시켜준다.
(Negate 인덱스 확장시 XYZ중 특정 축만 반대로 해 줄 수 있다. Y만 체크)
*Negate - 반전 시킨다는 의미.
D는 양의 X축이므로 Modifiers가 필요없고, A는 음의 X축이므로 Negate를 X축에 달아준다.
MYLook의 경우 Modifiers에 Negate를 걸고, Y만 체크해준다.
다시 캐릭터 블루프린트로 돌아와서 IMC만든걸 블루프린트에 연결해준다.
Event Graph에서 Event BeginPlay에 Cast To Playercontroller노드를 연결.
Get Controller 노드를 불러와서 Object에 넣어주고, As Player Controller에는 Enhanced Input Local Player Subsystem을 연결해준다.
Cast to PlayerController에서 실행핀을 뽑아 Add Mapping Context노드를 연결해주고 Mapping Context에 앞서 만든 IMC_MYAction을 설정해주고, Target에는 Enhanced Input Local Player Subsystem을 연결해준다.
앞서 만든 Input Action들 이름을 검색하면 Enhanced Action Events 카테고리에 있는 이벤트 노드를 가져올 수 있다.
3가지 다 가져오기
먼저 Move 이벤트 작동을 위해 Get Control Rotation을 가지고와 현재 캐릭터의 방향을 구하고, Get Right Vector, Get Forward Vector를 달아 앞, 옆의 방향을 얻어 Add Movement Input으로 캐릭터를 이동시켜준다.
Move 이벤트의 Action Value는 Split Struct Pin(핀 분할) 하여 각 Add Movement Input - Scale Value에 방향에 맞춰 달아준다.
Jump 이벤트는 Jump 함수노드를 달아준다.
Look 이벤트는 Add Controller Yaw Input과 Add Controller Pitch Input을 활용해 연결해준다.
캐릭터 기준으로 방향키가 작동하기 위해 몇가지 설정을 해준다.
캐릭터 블루프린트에서 BP_MYCharacter(Self)를 선택하고 디테일 창에 pawn을 검색하면 Use Controller Rotation Yaw가 있는데 이를 체크해제하면 캐릭터 앞면을 볼 수 있다.
SpringArm의 디테일창에서 Camera Setting - Use pawn Control Rotation 옵션을 활성화해준다.
캐릭터 무브먼트의 디테일에서 character movement (rotation setting) 값에서 Orient rotation to movement 값을 활성화해준다.
'Unreal Engine' 카테고리의 다른 글
Unreal VFX - 03 (0) | 2024.05.31 |
---|---|
Unreal Material - 08 (0) | 2024.05.30 |
언리얼 제작 사례 (0) | 2024.05.28 |
Unreal Blueprint - 02 (0) | 2024.05.28 |
Unreal Lighting - 06 (0) | 2024.05.27 |