클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

유저 캐릭터 애니메이션 만들기 1 - State Machine으로 상태 흐름 전환하기 본문

게임 개발 공부/개인 프로젝트

유저 캐릭터 애니메이션 만들기 1 - State Machine으로 상태 흐름 전환하기

huenuri 2024. 8. 25. 15:04

이제 애니메이션을 만들 차례가 되었다. 이번에는 왠지 꼭 성공할 것 같은 예감이 든다. 많이 헤매고 시행착오를 겪어야 더 성장할 수 있다는 걸 요즘 느끼고 있다.

지난번에는 마켓플레이스에서 여성 캐릭터 에셋을 가져와서 적용했으나 솔직히 캐릭터가 별로 마음에 들지 않아서 다시 기본 캐릭터로 바꾸었다. 마음에 드는 캐릭터가 없으면 구입을 해야 할 것 같다.

그럼 애니메이션을 본격적으로 만들어보자.


 

 

 

 

애니메이션 만들기

애니메이션 블루프린트 언리얼 공식 문서

 

애니메이션 블루프린트

 

마우스 오른쪽 버튼을 클릭해서 애니메이션 블루프린트를 만든다. 앞서 지정한 스켈레톤을 선택하고, ABP_Player라고 이름을 지어준다.

그리고 BP_Player 블루프린트에 들어가서 BP_Player 컴포넌트를 선택한 후, detail창에서 Animation 섹션에 보면 Animation Mode가 있다. 여기서 Anim Class를 ABP_Player로 지정한다. 그러면 앞서 만든 애니메이션 블루프린트를 사용할 수 있게 된다.

 

 

 

 

 


 

 

State Machine 추가

 

스테이트 머신 언리얼 공식 문서

 

State Machine에 들어가서 Locomtion 상태를 만들어본다.

Idle
Run
Jump

 

난 이미 만들어놓은 게 있어서 이렇게 노드를 연결해주었다.

 

 

 

 

 

 

 


 

 

 

 

Idle 상태 추가

 

 

 

Jump 노드

 

애니메이션을 적용하는 법은 오른쪽에 에셋 브라우저에서 해당 파일을 끌어오면 된다.

Run 노드는 나중에 BS_Player로 전환할 것이니 여기서 신경써서 만들지 않아도 될 것 같다.


 

 

 

상태 전환 흐름 연결하기 1

 

화살표 버튼을 클릭하면 해당 애니메이션의 흐름을 연결하고 전환하는 조건을 만들 수 있다.

먼저 애니메이션의 블루프린트를 만들어본다. Speed 변수를 하나 추가하고, 값을 바꾸어줄 Set을 불러와서 Get Pawn Owner, Get Velocity, Vector Length로 연결해준다.

 

 

 

Idle -> Run

 

Idele에서 Run으로 변하는 조건을 추가한다. 언제 가만히 있다가 달리는 모션이 될지 생각해본다.

Speed가 0보다 클 때 Run

 

 

 

Run -> Idle

 

Run에서 Idle으로 변하는 조건을 추가한다.
Idle -> Run의 반대의 조건이므로

Speed가 0보다 크지 않으면(작으면) Idle


 

 

이벤트 그래프 연결하기

 

먼저 isJump 변수를 하나 만들고 노드를 연결해준다. 전에 만든 노드가 있어서 조금 복잡하게 되어 있다.

 

BP_Player를 Cast로 받아서 isJump이면 is Falling이 실행되도록 한다.

 

 

 

 

 

Cast to BP_Player

캐스팅 참고 자료

 

형변환을 하려는 오브젝트가 형변환 대상 오브젝트와 같은지 검사 시도하는 것이다. 예를 들어 MyCharacter가 있는데 그 안에 변수와 기타 커스텀 함수성이 들어있으며, 그것을 디폴트 폰 클래스(모든 플레이어 캐릭터가 기본으로 사용하는 캐릭터 블루프린트)로 할당했다고 하자.

다른 블루프린트에서 플레이어 캐릭터의 프로퍼티에 접근하고자 하는 경우, Get Player Character 노드를 사용하여 일반적인 방식으로 플레이어 캐릭터의 위치나 회전값을 구할 수는 있다. 하지만 MyCharacter 블루프린트에 추가한 커스텀 함수성에 접근할 수는 없는데, 플레이어 캐릭터를 구하도록 셋업된 것이지 특정 유형 캐릭터를 구하는 것으로 셋업된 것은 아니기 때문이다.

Get Player Character 노드를 사용한 다음 Cast To MyCharacter 노드를 사용하면, 플레이어 캐릭터가 MyCharacter 라면 그 블루프린트에 들어있는 변수, 함수, 이벤트, 기타 특수 함수성에 접근하게 해달라고 할 수 있다.


 

 

 

상태 흐름 전환 연결하기 2

 

Ilde -> Jump, Run -> Jump

이제 마지막 흐름 조건을 연결해준다.

점프가 되는 것은 그냥 점프하기만 하면 되므로 특별한 조건이 필요하지 않다.

 

 

Jump -> Idle

Jump가 아니고, Speed가 0과 같다면 Idle

 

 

Jump -> Run

Jump가 아니고, Speed가 0보다 크다면 Jump

 

이제 상태 그래프가 모두 완성되었다.

 

 

 

 


 

 

완성된 프로젝트 화면

 

아직 영상을 찍어서 올리는 건 몰라서 움직이는 애니메이션을 캡쳐해보았다.


 

 

 

 

학습을 마치고

지난번에 모두 만들었던 부분인데 오늘 일지를 쓰며 확인해보니 빠진 부분이 많이 있었다. 상태 표시에서 몇 개의 흐름을 연결해주지 않았다. 그래서 애니메이션이 작동되지 않았던 거였다.

어떤 분이 왜 이 그래프를 양쪽으로 2개씩 연결했느냐며 삭제하라고 해서 삭제를 했는데 그때 애니메이션이 지워진 거였다.

프로젝트를 만드는 건 나 자신이기에 내가 모든 책임을 져야 한다. 나만큼 이 프로젝트에 애정을 갖고 있는 사람은 없을 것이다. 그러니 전문가의 의견이라도 모두 믿지 말고, 선별을 해서 받아들일 건 받아들이고 넘길 건 넘겨야겠다고 생각했다.

지금은 비교적 쉬운 기능을 구현하고 있지만 나중에 엄청 중요한 기능을 만들고 있을 때 사람들마다 의견의 차이가 있게 된다. 그럴때라도 나의 소신을 지키면서 판단을 잘 하는 게 좋을 것 같다.