[Unreal] 18일차 - Game Mode Class 만들기, 3인칭 카메라 생성과 회전, IMC 생성 및 적용, 플레이어 이동과 점프

2024. 8. 8. 02:07Unreal Engine

728x90
반응형

Game Mode Class 만들기

BluePrint 폴더에서 Blueprint Class를 하나 만든다.

 

 

[Game Mode Base]를 눌러서 생성하고 "BP_TPSGameMode]로 이름을 설정했다.

 

 

Project Setting에서 [Maps & Modes]에서 방금 만든 BP_TPSGameMode를 선택한다.

 

 

그리고 만든 BP_TPSGameMode를 더블클릭하여 열어서 [Details] - [Classes] - [Default Pawn Class]를 BP_Player로 설정한다.

 

 

Project Setting 에서도 BP_Player로 바뀌어있는 것을 볼 수 있다.

 

 

이제 캐릭터를 Viewport에서 지워도 Game Mode에 의해서 실행했을 때 캐릭터가 생긴다.

 

 

[World Settings]를 열면,

 

 

오른쪽 아래 [Details] 창 옆에 [World Settings] 창이 새로 생기게 되고, 여기서도 BP_TPSGameMode로 설정한다.

Project Settings 보다 World Settings의 Game Mode가 우선시 된다.

 

 


 

 

3인칭 카메라 사용하기

BP_Player에서 [Components]에 Add를 눌러 검색하여 [SpringArm]을 추가한다.

 

 

이후 SpringArm에 종속 되도록 SpringArm을 클릭한 상태로 Add, Camera를 검색하여 추가한다.

 

 

이제 실행하면 3인칭 카메라가 만들어진 것을 볼 수 있다.

 

 

SpringArm의 Transform을 살짝 수정했다.

 

 


 

 

Enhanced Input을 이용한 플레이어 이동

StarterContent로 추가했던 [ThirdPerson] - [Blueprints] 경로로 가면 BP_ThirdPersonCharacter가 있고 더블클릭하여 연다.

 

 

맨 위에 Add Input Mapping 부분을 복사하여 내 BP_Player로 가져온다.

 

 

BP_Player에 붙여넣었다.

 

 


 

 

Input Mapping Context (IMC) 만들기

Input 폴더를 하나 만들고 우클릭, [Input] - [Input Mapping Context]를 눌러 생성한다. 이름은 "IMC_TPS"

 

 

[Input] - [Input Action]을 눌러 액션도 생성한다. "IA_TPSMove"로 이름 설정.

 

 

IA_TPSMove를 더블클릭하여 연다.

Horizontla과 Vertical을 사용할 예정이기 때문에 [Value Type] - [Axis2D]로 설정한다.

 

 

IMC_TPS을 더블클릭하여 열고 [IA_TPSMove]로 설정한 후 A, D, S, W 키를 추가한다.

 

 

여기서 A 입력은 음수로 받아올 것이기 때문에 [Modifiers]에서 element를 하나 추가하고 Negate 설정을 한다. (Vertical의 음수 S 키는 나중에 설정한다.)

 

 


 

 

움직임 적용

BP_Player로 돌아와서, 기존 입력 노드를 지우고 TPSMove를 검색하여 만들었던 Game Mode를 추가한다.

Action Value 값은 우클릭 후 Split하여 Action Value X와 Action Value Y로 나누었다.

 

 

이후 노드를 아래와 같이 연결한다.

 

 

그리고 복사해온 노드에서 Mapping Context를 위에서 만들었던 IMC_TPS로 설정한다.

 

 

여기까지 BP_Player 블루프린트의 전체 뷰

 

 

좌우로 잘 움직인다.

 

 

앞뒤 움직임을 위해서 아래와 같이 노드를 연결한다.

 

 

IMC_TPS에서 S 키를 Negate 설정해도 실행해보면 W, S를 눌렀는데 좌우로만 움직인다. Y값으로 들어오지 않는다는 것.

 

 

W와 S 키에 대해서 추가 설정이 필요하다. 두 키 모두 [Modifiers]에 [Swizzle Input Axis Values]를 추가한다. YXZ로 Y값이 가장 먼저 오게 만들어서 Y 값을 매핑하는 것이다.

 

 

이제 앞뒤좌우 이동이 가능해졌다.

 

 


 

 

점프 추가하기

IA_TPSJump 이름의 Input Action 하나를 생성했다.

 

 

IMC_TPS Game Mode에서 [Mappings] 추가, IA_TPSJump 넣고 스페이스 바를 눌렀을 때 점프 하도록 설정한다.

 

 

BP_Player로 와서 TPSJump 검색해서 노드 추가, Jump 검색해서 노드 추가한 후 연결한다.

 

 

점프 한다.

 

 

BP_Player의 [Character Movment]를 누른 후 [Details] 창을 보면 Jump와 관련된 설정이 있다. 여기서 세부 설정 가능.

 

 

최상단 BP_Player 선택한 후 [Details] 창에 jump max를 검색하면 [Jump Max Count]로 점프 횟수를 조절할 수도 있다.

 

 


 

 

카메라 회전

마우스 입력에 따라 카메라가 회전 할 수 있도록 "IA_TPSTurn" Input Action을 생성했다.

 

 

[Value Type] - [Axis1D]로 설정

 

 

IMC_TPS에서 [Mappings] 하나 추가, Mouse X 값을 받도록 했다.

 

 

BP_Player에서, TPSTurn을 검색해서 노드 추가, Add Controller Yaw Input 검색해서 노드 추가해서 연결한다.

 

 

마우스 입력에 따른 회전까지 구현되었다.

 

 

위아래 카메라 회전도 추가한다.

IA_TPSTurn을 복제하여 IA_TPSLookup을 생성했다.

 

 

IMC_TPS에서 추가한 후 Mouse Y 값을 받아오도록 설정.

 

 

BP_Player에서 노드 추가

 

 

실행했지만 마우스 위아래 값을 받아오지 못했다.

BP_Player를 선택한 상태로 오른쪽 [Details] 창에서 rotation을 검색하고 아래쪽 [Pawn] - [Use Controller Rotation Pitch] 체크박스를 체크하면 실행했을 때 위아래 마우스 값도 적용되는 것을 볼 수 있다.

 

 

오히려 체크박스 체크 때문에 플레이어 자체가 바닥을 보거나 하늘을 보면서 회전하게 된다. 우리가 원하는 건 카메라가 회전하는 것. 다시 체크를 해제한다.

 

 

[SpringArm]을 선택한 상태로 rotation 검색 중에 [Use Pawn Control Rotation] 체크박스를 체크하면 이제야 카메라가 움직이며 의도한 대로 나오는 것을 볼 수 있다.

 

 

그런데 Mouse Y 값이 의도한 것과는 반대로 나왔기 때문에 Negate를 추가했다.

 

 

다시 수정할 부분이, Yaw 회전은 캐릭터가 마우스 회전을 따라오겠다는 뜻으로 다시 체크박스를 체크한다.

 

 


 

 

앞뒤좌우가 고정된 상태로 이동되는 현상 수정하기

간단하게 Actor의 forward와 right Vector 값을 받아와서 수정했다.

 

 

BP_Player의 전체 블루프린트

 

 

이동과 카메라 회전이 잘 된다.

 

 


 

 

기능 참고 사항

*[Use Controller Desired Rotation]은 [Use Controller Rotation Yaw]를 껐어도 카메라가 회전하는 방향대로 뒤늦게 플레이어를 회전시켜 준다. 카메라가 먼저 돌고 곧바로 플레이어가 회전하는 느낌.

*[Orient Rotation to Movement]는 마찬가지로 다른 Controller 체크를 껐어도 카메라는 따로 돌고 플레이어가 이동하는 방향을 기준으로 회전한다. 즉, 카메라와 플레이어가 따로 회전하는 느낌.

 

 

살짝 비틀어서, 아래와 같은 세팅을 한다면, 카메라는 따로 돌고 앞으로 나아가고 싶으면 카메라 기준으로 휙 도는 느낌도 낼 수 있다. 좌우 이동도 휙 도는 느낌 마찬가지.

 

 


728x90
반응형