초보 코린이의 성장 일지

UE4 캐릭터 동작 및 카메라 본문

언리얼

UE4 캐릭터 동작 및 카메라

코오린이 2023. 1. 2. 15:58

게임내에서 무기를 장착하면 전방을 기준으로 잡고 움직일 것이다. 

여기서 전방의 기준이 되는것은 캐릭터의 기준이 아닌 카메라의 기준이 된다.

무기를 들지 않는 상태에서는 모든방향을 자유롭게 움직일 수 있지만 무기를 들었을때는 전방을 기준으로 설정할 것이다.

 

우선 Get Control Rotation을 선언한다. 플레이어의 컨트롤러는 카메라를 보유하고 있어 플레이어 기준으로 카메라를 가져온다고 생각하면 된다. (플레이어의 회전값) 또한 구조체로써 핀분활을 눌러 x, y ,z축을 열어주거나 Break를 선언해서 사용해야한다.

 

 

그리고 구조체는 Make를 가지고 있어 선언 후 필요한 수행값을 보내준다.

 

이제 카메라의 전방 Get Forward Vector를 받아 MoveForward와 연결해 준다. return되는 함수들은 퓨어라고 부른다. 갈래를 나눠서 사용이 가능하며, MoveRight 또 한 Get Right Vector 받아서 동일하게 연결해준다. 하얀색 화면이 보인는것은

이 동작이 어떠한 동작을 가리키는지 구역을 나눠 보기 편하게 하기 위함이다.

 

위 동작의 대한 값은 들어갔고 이제는 애니메이션을 통해 동작의 움직임을 구현하게 된다.

 

애니메이션을 다룰 애니메이션 블루프린트를 생성해준다. 그리고 위에 그림과 같이 상속 받는 부모 객체와 타겟을 설정해준다.

 

왼쪽이 애니매이션 블루프린트 오른쪽이 캐릭터 동작을 다루는 곳이 되면서 구역이 나뉘게 된다.

 

 

이제 애셋 블라우저의 있는 애니메이션을 가져와 연결해준다. 이렇게 기본적인 동작이 구현되면서 앞으로 계속 이어져 갈것이다.

 

애니메이션 동작이 여러개로 이어지려면 블렌드 스페이스를 생성해 줘야한다. 그렇게 되면 내가 원하는 값에 따라 애니메이션이 이어진다.

 

 

만든 BS_Unarmed를 누르고 왼쪽에 있는 Axis Settings에서 값을 설정해 줄 것이다. 

우선 변수명은 Speed로 만들고 이 Speed를 받아서 동작이 자연스레 이어지도록 구현을 하게 될 것이다.

Name바로 아래는 Speed의 최소값 그 밑에는 최대값 수치를 나타내고, 그 밑에는 칸을 쪼개는 칸수를 나타낸다.

0 = 일때는 가만히 서있고 -> 400 = 천천히 걷고 -> 600 = 뛰게 될 것이다.

 

 3칸으로 나눠진 구역에 왼쪽부터 수치가 설정되어 있다. 이 각 구간마다 원하는 애니메이션을 올려 놓고 이어 붙인다.

(하얀색 원) = 각 각 애니메이션 동작 

 

 

이제 이벤트그래프로 들어가 동작값을 설정해준다

Is Valid는 값이 Null인지 아닌지 판별해주는 기능을 가지고 있다. 선언할때 ! 와 ?가 있는데 ?를 사용할 것이다.

Null이라면 아래 Is Not Valid가 될것이고,  그게 아니라면 Is Valid가 된다.

(! = if 문법, ? = 노드를 나눠주는 것)

 

이제 값을 설정할 변수들을 어려개 만들어준다. 그중 Player의 변수 유형은 Player가 된다.

 

변수 Player을 사용하기위해 아래 검증된 Get으로 변환을 해줘야한다.

그리고 Get 유효하다면 Not Null이 될 것이고, 유효하지 않다면 BP_Play로 캐스팅(형변환)으로 이어준다.

 

누구와 이어주냐  Try Get Pawn Owner과 이어준다. 이렇게 되면 처음 시작할때 런타임 모드에 들어가면 첫번째 프레임에서 무조건 플레이어가 Null이기 때문에 오른쪽 끝 Set으로 플레이어를 셋팅을 하게된다. 그리고 2번째 프레임에서는 Valid로 오게된다.

 

 

Player의 Get Velocity는 이동방향이자 속도(크기)가 된다.

플레이어의 이동방향을 구해서 이동방향의 속도는 크기가 되기 때문에 속도를 Vector로 받아서 셋팅해준 노드 연결 상태를 보여준다.

 

 

Movement를 선택해 오른쪽 설정란에 찾아 들어가 Orient Rotation to Move를 체크해줘야한다.

오른쪽을 누르게 되면 오른쪽 방향으로 힘을받아 회전을 하게되기 때문에 이러한 설정이 필요하다.

하지만 카메라 방향을 따르게 되어있는 상태라 해제해 줘야한다.

Use Controller Rotation 체크되있는걸 풀어줘야한다.

이제는 캐릭터가 바라보는 방향으로 카메라와 별로도 제대로된 동작을 하게 된다.

 

 

이제 키를 눌러 다른 동작을 하게 될 키셋팅을 미리 선언해준다.

 

Run는 구역으로 나눠주고 액션 이벤트 Run을 선언해주고 Speed 셋틍에 따라 움직이도록 2가지를 설정해준다.

Set Max Walk Speed를 선언해서 노드를 연결해준다.

키를 눌렀을때는 뛰어야하니까 600에 연결 키를 땟을때는 릴리즈 되야하니까 아래 400에 연결 그리고 Set들은 self 상태가 아니기 때문에 타깃부분을 Movement를 연결해 줘야한다. 그럼 이제 캐릭터들이 Shift를 눌렀을때 뛰게 된다.

 

 

Valid로 부터 출발을 한다 시퀀스 Then은  0번이 끝나면 1번이 2번으로 자연스레 동작을 하게하는 노드를 연결하는 중간 단계 역할로써 편한 기능을 준다.

 

플레이가 점프를 시작해서 추락을하면 ture가 되는 bool로 표현한 노드이다. 

 

FSM처럼 State를 만들어서 플레이어에 행동을 관리해 줄 것이다. 위에 보이는 이름 그대로 기능들을 다양하게 만들어 보겠다. Entry는 시작하면 조건없이 BS_Unarmed로 들어가고 시작한다.

이제 각 노드를 연결해준 화살표 사이에있는 모양을 클릭 후 들어가서 상태를 어떻게 전이 할 것인지 어떻게 넘겨 줄 것인지 설정을 할 것 이다.

 

 

BS_Unarmed -> JumpStart

점프를 하고 추락하는 과정 또한 플레이어의 발이 땅으로부터 떨어졌기 때문에 떨어지는 순간 ture로 변한다.

JumpStart -> JumpLoop

Time Remaining(ratio)로 선언해서 남은 시간 비율을 가지고 상태를 전이할 것 이다.

< 표시는 작다라는 표시로 0.5 = 50프로가 안될때 ture가 되서 넘어가라는 의미이다.

JumpLoop -> JumpEnd

떨어져서 점프가 끝나는 조건은 Not bool로 연결해준다. 

JumpEnd -> BS_Unarmed

남은 시간 비율이 80% 다 작다면 ture가 된다.

 

이제 점프를 구현할 것 이다. 점프는 이미 가지고 있기 때문에 연결을 해주면 된다. 그리고 키셋팅도 끝나있기 때문에 누르면 점프를 할 수 있다.

 

이제는 무기를 뽑는 모션을 자연스럽게 연결해 볼 것이다. 무기는 아직 들지 않고 있으나 모션만 구현할 것 이다.

 

BS_Unarmed -> Draw_Sword_1

Drawing가 ture라면 드는 모션을 취한다.

 

Draw_Sword_1 -> Draw_Sword_2

남은 시간이 비율이 0.3보다(70%) 작다면 true

 

위에 설명대로 흘러간다면 칼을 뽑는 동작까진 된다. 하지만 칼을 뽑고 정면을 응시하면서 움직일 것 이기 때문에 변수도 Speed랑 Direction(방향)까지 추가해서 값을 넣어줘야한다. 

만든 블렌드 스페이스를 들어온다.

 

가로축을 방향으로 사용하고 세로축을 속도로 사용할 것 이다. -180, 180은 플레이어 뒤를 나타낸다. 그리고 4칸으로 나눈다. 세로축은 속도로 0부터 600까지 사용 할 것이다. 아까 한 것처럼 3칸으로 나눈다.

 

이제 애셋을 사용하여 수치의 맞게끔 애니메이션을 올려준다. 보는거와 같이 정면이 Direction에 600지점 좌우는 말 그대로 좌우를 나타낸다. 그리고 양 끝이 아래 수치와 같이 -180, 180이기 때문에 플레이어 뒤를 나타낸다.

그리고 400 지점은 걷기를 넣어주면서 600은 뛰는걸 넣어준다. 이러면 셋팅이 끝나게된다.

 

BS_Sword를 눌러 들어가 설정해 놓은 속도, 방향을 연결해 마지마가 출력 애니메이션이 되도록 만들어준다.

Direction은 아래 사진에 마지막에 추가했던 변수를 연결해 준 것이다.

위에 설정해 놓았던 곳에서 다른 동작을 하도록 노드를 이어 줄 것이다.

Calculate Direction을 만들고 그안에 Veloctiy가 있는곳으로 위에 Get Velocity를 연결해준다.

이제 Base Rotation이 카메라의 방향인 Get Control Rotation이 연결되면 된다.

이러면 카메라가 어떤 속도로 이동하는지 전달이 된다.

이제 Direction을 Set로 선언해 Speed와ㅏ Direction을 받으면 방향도 만들어주게 된 것이다.

 

Draw_Sword2 -> BS_Sword

위에 마지막 설정을 못끝낸 상태를 설정해 줄 것이다. 모든 설정이 끝났으니 이제 실행 조건만 넣어주면 된다.

남은 시간 비율이 30% 보다 작다면 true가 된다.

 

이제 이벤트그래프로 돌아가 값을 넣어준다. 장착한걸 체크해 주기위한 bool 변수를 2개 만들어준다.

Sword가 if문을 통해 Equipped (bool)변수인 조건을 판단해 장착이 안되어 있다면 Equip로 갈 것이다.

장착 중에는 계속 장착 할 수가 없기 때문에 동작을 제한해준다.

장착 중 이라면 if문을 통해 false라면 Equipping로 가게된다. (Equipping안에 체크를 해줘야한다)

End_Equip는 위에서 Equip명령을 내리면 Equipping 동작이 들어가고 끝나면 End_Equip가 실행된다.

 

이제 마지막 Drawing이 true일때 넘어와야 하니까 플레이어로 부터 Equipping을 받아 Set Drawing에 연결해준다.

그러면 2번을 누를때 ture가 되면서 칼빼는 동작까지 이어진다.

 

 

- 점점 어려워 진다.

- 구조를 정확하게 파악하지 못하거나 햇갈려 한다면 힘들거 같다.

'언리얼' 카테고리의 다른 글

UE4 충돌 및 적과 충돌  (0) 2023.01.06
UE4 몽타주 사용, 캐릭터 콤보  (0) 2023.01.05
UE4 무기 장착 및 모션  (0) 2023.01.04
UE4 캐릭터 움직이기  (0) 2022.12.30
UE4 시작 2022, 12, 29  (0) 2022.12.29
Comments