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

RPG 게임 기능 1 - 애니메이션 Locomotion & Blend Space 활용한 기본 상태 애니메이션 기능 본문

게임 개발 공부/언리얼 엔진

RPG 게임 기능 1 - 애니메이션 Locomotion & Blend Space 활용한 기본 상태 애니메이션 기능

huenuri 2024. 8. 25. 14:24

오늘부터 시간이 나는대로 RPG 게임 튜토리얼 영상을 보면서 게임 프로젝트를 만드는 연습을 하기로 했다.
개인 프로젝트를 잘 만들기 위해서는 언리얼 학습이 기반이 되어야 하니 매일 조금씩이라도 학습해보려고 한다.

전에는 한국어로 된 자료만 찾아보았는데 그러기에는 한계가 있었다. 언리얼 자료는 외국 동영상이 많기에 이제부터는 영어 영상이더라도 영어공부를 한다 생각하고 시청해보기로 했다.

오늘 해볼 프로젝트는 Locomotion으로 애니메이션을 만드는 것이다. 영상이 무척 길어서 몇 개의 포스트에 나누어서 정리해볼 예정이다.


 

 

 

Blend Space 1D 만들기

 

먼저 애니메이션 에셋을 가져와서 각 폴더별로 정리해준다. 걷는 애니메이션과 기어가는 애니메이션을 추가해주었다.

그런 다음 Blend Space 1D를 만든다. 속도만 받을 것이므로 방향을 제외한 1D로 설정하는 것이다.

 

 

 

지정된 속도 확인하는 법

최대속도를 500으로 설정하는데, 그건 Third Person 블루프린트의 detail speed 메뉴에서 확인할 수 있다.

 

캐릭터 무브먼트 컴포넌트를 선택한 후 볼 수 있으며 여기서 최대속도를 변경할 수도 있다.

 

 

 

 

 

 

가장 느린 속도에서 중간, 빠른 속도로 지정해준다.

Ctrl을 누른 상태로 선 위에 마우스를 대면 애니메이션을 볼 수 있다.


 

 

애니메이션 블루프린트 만들기

 

기본 애니메이션 상태 추가하기

ABP_ 이름으로 블루프린트를 하나 만들고 상태 머신을 추가한다.

 

조금 전에 2시간 동안이나 작업했던 기록이 모두 날라가서 의욕이 많이 상실되었지만 다시 처음부터 한다는 마음으로 정리를 해보겠다. 스테이트 머신은 기본적으로 모든 애니메이션을 넣을 수 있는 그래프 구성표와 같다.

 

 

 

 

각각의 상태 애니메이션 추가하기

Idle, Walk/ Run, Stop 애니메이션을 하나씩 추가하고, 각각의 애니메이션 상태에 들어가서 추가하고 싶은 애니메이션을 끌어온다.

Idle

 

Idle에서는 계속 이 상태에 머물러 있을 예정이니 루프를 활성화한다.

 

 

 

 

Walk/ Run

 

여기서는 앞서 만들었던 Blend Space1D를 추가해주자. 플레이어의 속도에 따라 이를 동적으로 변경해야 한다는 뜻이다. promote하여 변수로 승격화시키면 바로 변수를 받을 수 있다.

 

 

속도가 0보다 크면 걷기 모드 애니메이션이 적용되도록 만든다.

 

 

 

 

Stop

애니메이션에 중간에 멈추면 더 멋진 생생한 동작이 될테니 이 애니메이션도 하나 넣어준다.

 

이렇게 3가지 상태의 애니메이션을 만든 다음 화살표 버튼을 클릭해 각각의 조건도 만들어준다.

정지 상태는 0보다 작거나 같을 때로 성립하는 것으로 한다.

 

 

 

 

Stop -> Idle

stop에서 Idle은 따로 조건을 추가하지 않았다. 이건 자동으로 만들어지도록 할 예정이니 detail 창에서 automatic을 활성화시킨다.

그런 다음 duration을 0.3 또는 0.4로 변경시키고 Mode도 cubic으로 바꾸어준다. 이 기능은 애니메이션을 좀더 부드럽게 하기 위함이다.

 

cached를 추가해서 스테이스 머신과 연결해준다. Locomotion 애니메이션을 펜 드라이브에 저장하는 것과 비슷하다.


 

 

 

Main 애니메이션 추가하기

 

기본적으로 다른 상태의 상태 이동을 포함하는 애니메이션이다. 예를 들어 비무장 이동, 웅크린 이동, 수영 등의 여러 상태의 애니메이션을 추가할 수 있다.

 

출력 포스트 버튼에 연결하고 싶은 기본 슬롯을 추가한다. 기본 슬롯은 애니메이션 몽타주가 재생될 슬롯이나 애니메이션 공간이고, 애니메이션 몽타주는 기본적으로 재생되는 애니메이션이다.

 

 

 

 

 

Unarmed Locomotion

 

여기에 들어가고 싶은 캐시만 통과하면 되므로 이 공간 메모리를 통해 이 상태로 캐시해본다.

 

 

 

실제로 기본 스테이스 머신 내부에서는 전체 구성표를 전달하지만, 더 나은 단일 노드에서 전달하기 위해 main에서 설정했다.

 

 

speed 값을 설정하면 제대로 작동하는지 볼 수 있다.


 

 

3인칭 블루프린트 이벤트 그래프

 

3인칭 블루프린트 뷰포트의 detail 창에서 Animation의 Anim class가 ABP 캐릭터로 설정이 되어 있는지 확인한다.

 

 

 

 

 

이동 속도를 받도록 그래프 만들기

이제 게임을 플레이할 때 플레이어의 실제 속도로 할당하기 위해 이벤트 그래프로 이동한다.

블루프린트 폰 소유자는 속도를 얻고 변수에 대해 원하는 작업은 벡터 길이로 연결할 수 있다. 벡터가 x, y, z로 구성된 부동소수점으로 받아 속도를 전달한다.

 

이상하게도 난 정지할 때 왼쪽 오른쪽으로 고개를 돌리는 애니메이션은 실행되지 않았다. 해결하려고 여러번 시도했으나 되지 않아서 그냥 넘어가기로 했다.


 

 

 

점프 애니메이션 만들기

 

Jump와 Fall 애니메이션을 만들고 루프도 활성화한다.

점프는 3인칭으로 하고 있기에 To Failling이라는 별칭을 하나 더 만든다. 이는 지름길을 발전시키는 것과 같아 수동으로 모든 것을 연결하는 대신 LDS를 사용할 수 있다.

 

 

 

조건 추가하기

 

To Falling에서 Jump로 가는 조건을 더 추가해본다. 속도가 될 변수를 하나 만들고 이는 방향이 있는 벡터 유형으로 받는다. 구조체를 분할하여 개별적으로 모든 엑세스 권한을 가질 수 있게 한다.

100보다 크면 떨어지도록 만든다.

 

 

 

 

Jump -> Falling

Automatic을 활성화하고 착륙하는 애니메이션도 만들어보자. 그 반대의 조건인 Land도 하나 만들어준다.

 

착륙 애니메이션이 끝나면 자동으로 정상적인 이동으로 돌아가므로 이를 연결한다.

 

 

 

 

이벤트 그래프 연결하기

블루프린트를 초기화하는 노드를 하나 만든다. 시작할 때 3인칭 캐릭터를 폰 소유자에서 캐스팅을 받아 모든 변수에 엑세스한다.

마우스 오른쪽 버튼을 클릭해서 변수로 승격화하고 이름도 Character로 변경해준다.

 

그런 다음 캐릭터에서 캐릭터 이동을 가져와서 is Falling 스폰을 얻는다. 떨어지면 이 노드가 만들어지도록 연결한다.
한번만 사용할 것이므로 업데이트에 할 필요는 없다.

 

 

이렇게 했을 때 원래는 땅으로 꺼져야 하는데, 내 경우에는 그냥 점프 상태 그대로 있었다.

 

 

 

Land 모션

 

지면에 닿았을 때의 부드럽게 움직일 수 있는 애니메이션 포즈를 추가한다.


 

 

 

학습을 마치고

새벽에 2시간 동안 했던 작업이 모두 날라가서 다시 작성하기 힘들었지만 복습한다는 생각으로 해보았다. 거의 암기가 될 정도로 애니메이션이 쉬워지기 시작했다.

작업을 하다보면 이렇게 실수를 할 때도 있고 같은 내용을 반복해야 할 때가 있다. 솔직히 그럴 때 할맛이 나지 않고 멈추고 싶은 마음이다. 그래도 아직은 완벽히 이해하지 않았기에 다시 한번 시도해보는 걸 멈추지 않기로 했다.

사실 어제 새벽에 작성했던 기획서도 다른 PC에서 사용 중에 이전 PC에서 작업하던 걸 끄지 않아 모두 지워지고 말았다. 낙담하지 말고 다시 작업을 진행하려고 한다. 하지만 다시는 같은 실수를 반복하지 않도록 저장을 잘 하고, 뒤로 가기 버튼을 누르지 않도록 주의해야겠다~