그 안을 들어가 살펴보면 현재 아무런 메쉬가 없이 캡슐 컴포넌트 하나만 존재하게 될 것이다
매시 추가
스켈레탈 메시에서 메시를 선택하면 캐릭터를 원하는 형태로 만들 수 있다
이때 캡슐 컴포넌트의 위치에 맞춰 캐릭터 메시를 맞춰줄 수 있다
카메라 및 Spring Arm
SpringArm과 Camera를 추가하게 되면 플레이어 뒤에 카메라가 생기며 게임 실행 시 우리가 아는 그 화면으로 보일 수 있게 된다
💡SpringArm 카메라를 제어하는데 사용하는 컴포넌트로 캐릭터와 캐릭터 사이의 거리를 일정하게 유지 시켜준다 또한 카메라가 벽이나 장애물에 충돌할 때 자동으로 카메라의 위치를 조정할 수 있게 해줌으로 카메라가 벽이나 장애물을 통과하지 않고 캐릭터를 보여주게 해준다 플레이어가 회전하거나 빠르게 움직일 때 카메라가 자연스럽고 부드럽게 캐릭터를 따라 움직이게 해준다 bUsePawnControlRotation 옵션을 통해 플레이어 입력애 따라 카메라 회저을 제어할 수 있게 해준다 Socket Offset과 Target Ofsset을 통해 카메라의 정확한 위치를 미세 조정이 가능하다
입력 - Move, Look
💡Enhanced Input System Unreal Engine 5 버전으로 바뀌면서 입력을 맵핑하는 방법이 바뀌었다
향상된 입력 방법은 입력매핑 컨텍스트와 입력 액션 추가하여 커스텀하여 입력을 할 수 있게 해준다
💡입력 액션과 입력 매핑 컨텍스트
입력 액션
게임에서 수행할 수 있는 특정 동작을 정의하는 역할을 한다
설정
Value Type: 입력 값의 타입을 지정한다
Triggers : 입력이 언제 발생할지 결정한다(누를 때, 때었을 때 등)
Modifiers : 입력 값을 변형 시킬 수 있다(반전, 스케일 조정 등)
입력 매핑 컨텍스트
여러 입력 액션을 그룹화하고 특정 키나 버튼에 매핑하는 역할을 한다
기능
입력 액션을 하나의 컨텍스트로 묶을 수 있다
런타임 중 컨텍스트를 추가하거나 제거할 수 있어 상황에 따른 입력 관리가 용이하다
Move, Look 입력 액션은 모두 X, Y축을 사용하므로 Value Tyep에 Axis2D로 설정을 해준다
입력 매핑 컨텍스트에서 입력 액션을 추가한 뒤 특정 키로 맵핑을 해줄 수 있다
이동은 하나의 입력 액션을 사용해 4개의 버튼으로 사용하기 때문에 모디파이어를 변경해주어야 한다
W는 앞으로 가는 키로 기본 값으로 설정을 해주고 S는 W와 반대로 움직여야 하므로 모디파이어에 부정으로 설정하여 들어오는 값의 -를 곱해 뒤로 이동할 수 있게 해준다
A와 D는 좌우로 움직여야 하는데 이때 스위즐 입력 축 값을 사용하면 들어오는 입력의 축 값을 바꿀 수 있다
이때 Unreal은 왼손좌표계를 이용하므로 오른쪽으로 이동하는 것이 + 값이므로 A에 부정을 추가해준다
캐릭터 회전
캐릭터 블루프린트 클래스로 돌아와 만들어준 입력 액션중 Look을 콜하여 return해주는 벡터 값을 핀분할을 통해 분해해준다
이때 X 값은 Add Controller Yaw Input에 Y 값은 Add Contoller Pitch Input에 넘겨주는대 X 값을 Yaw인 Z 축에 넘겨주는 이유는 마우스가 X 축으로 이동할때 카메라의 Z축을 회전시켜 마우스가 이동하는 방향으로 카메라를 비추기 위해서이다
디테일 페널에서 컨트롤러 피치 및 요를 사용하는 것을 체크하여 움직여보자
카메라가 회전할 때 그 방향으로 캐릭터도 같이 움직이면서 원하는 움직임이 나오지 않을 것이다
그 이유는 컨트롤러 회전 사용은 캐릭터 전체와 연결이 되어있기 때문이다
따라서 두개다 체크 해제를 해준다
다시 돌아와 캐릭터 무브먼트 컴포넌트를 선택 후 무브먼트 방향으로 회전 조정에 체크를 해보자
또한 SpringArm 컴포넌트의 폰 제어 회전 사용도 체크해준다
이렇게 되면 우리가 알고있는 게임의 카메라 회전과 비슷하게 나올것이다
하지만 Y 축 회전 시 애플의 스크롤 처럼 움직이게 되는 것을 볼 수 있다
이것을 고치기 위해 입력 매핑 컨텍스트에 Look을 찾아 모디파이에 부정을 추가해준다
이때 인덱스를 펼치면 축에 따라 값을 적용할지 안할지 설정할 수 있는데 이때 Y축 값만 체크하여준다
이제 플레이를 하게되면 우리가 알고있는 게임의 카메라 회전과 동일하게 움직이는 것을 볼 수 있다
캐릭터 움직이기
입력 액션으로 만든 Move를 가져와 Value 값을 핀분할 해 각각 Add Movement Input 함수에 넣어준다
Add Movement Input은 엔진 내에서 제공하는 함수로 들어오는 Float 값과 Vector 값을 통해 움직임을 제공해준다
💡 Controller Rotation을 이용하는 이유!! 캐릭터의 움직임은 카메라가 현재 바라보는 방향을 기준으로 움직인다 예를 들어 카메라가 플레이어의 오른쪽 방향을 바라보고 있을 때 캐릭터가 앞으로 움직인다 생각해보자 그러면 캐릭터는 카메라가 바라보는 방향을 기준으로 회전하여 움직일 것이다 이러한 기능을 위해 Controller Rotation을 가져와 사용하는 것이다
☝Forward Vector, Right Vector Foward Vector 앞뒤 움직임에서 Controller의 회전 값 중 Z 값을 가져와 Forward Vector에 Z 값만 넣어 Vector 값으로 만들어주게 되는데 여기서 의문점이 생겼다 왜 Z 축 값이며 Forward Vector인가 Controller Rotation에서 설명한 내용을 가지고 생각해보자 일단 Forward Vector에 대해 알아야 한다 이는 X축이 1이고 나머지는 0인 Vector(1,0,0) 인 방향 벡터이다
그림을 보고 생각을 해보자 각각의 축을 기준으로 Forward Vector를 구한 뒤 앞으로 움직이게 되면 이동하게 될 방향을 그린 그림이다 이처럼 Z 축이 아닌 다른 축으로 Forward Vector를 만들어 연산하면 카메라 회전에 따라 땅에 박히거나 하늘로 날라가는 등 잘못된 움직임을 보일 것이기 때문에 Z 축 값을 넣은 것이다 Right Vector Right Vector는 Y축이 1인 Vector(0,1,0)인 방향 벡터이다 Forward Vector에서 설명한 것처럼 Z,X축을 기준으로 Right Vector를 만든 이유도 동일한 이유이다