UE5) 플레이어 애니메이션
https://zzugest1.tistory.com/67
UE5) 총알 충돌 구현
https://zzugest1.tistory.com/66 UE5) 플레이어 물체 발사https://zzugest1.tistory.com/65 이동과 마우스 회전이 가능한 플레이어에서 물체를 발사하는 기능을 구현하고자 한다. 물체를 발사하는 키를 입
zzugest1.tistory.com
이전 글에선 플레이어를 단순한 상자 모양으로 구현했지만 대부분 게임은 이렇지 않다. 이용자에게 생동감 있는 게임을 위해 애니메이션을 적용해 캐릭터를 만들어야 한다.
Mixamo
www.mixamo.com
캐릭터 애니메이션 리소스는 Mixamo나 언리얼 엔진 마켓 플레이스에서 무료로 다운받을 수 있다.
먼저 캐릭터를 선택하고 애니메이션을 다운받으면 해당 캐릭터의 애니메이션을 fbx파일로 가져올 수 있다.
우선 앞으로 달리는 모션하나만 다운 받아서 이용하고자 하면
캐릭터 선택 후 In Place를 선택 후 다운로드 받은다음 언리얼 프로젝트에 임포트 하면 된다.
이제 위 몬스터를 플레이어 캐릭터로 만들려면 이전에 만들었던 캐릭터 클래스의 디테일창으로 가서
스켈레탈 메시 에셋을 살펴보면 임포트된 몬스터의 에셋을 선택할 수 있다. 이를 적용하고 실행하면
이 상태에서 이동과 점프는 하지만 몬스터는 움직이지 않고 십자로 굳어있다. 여기서 가져온 애니메이션 시퀀스를 이용해야한다.
파일 빈 공간에 애니메이션 -> 블랜드 스페이스를 클릭 후 스켈레탈 메시로 다운받은 몬스터를 선택하면
몬스터의 블랜드 스페이스의 창이 뜬다. 여기서 왼쪽 에셋 디테일 창에 Axis Settings 부분을 가로세로축을 위와 같이 Rotation과 Speed로 설정해준다. Rotation을 -180~180으로 설정해 360도 방향으로 만들어주고, Speed는 플레이어가 멈춰있을 때와 움직일때의 최고속력을 적절히 설정해준다.
그 다음 오른쪽 아래 에셋 브라우저에 다운받은 몬스터의 애니메이션 시퀀스들이 보이는데 위에서 다운받은 달리기 애니메이션 Running_Anim과 Idle(기본 상태)을 이용한다. 에셋 브라우저에서 Idle 애니메이션 시퀀스를 눌러 가운데로 옮길 수 있다. Idle은 움직이지 않을 때의 상태이므로 Speed가 0인 곳에, 달리기는 속력이 높을때 이므로 Speed가 최대(여기선 600)인 곳에 옮기면 된다.
Rotation이 90일 때도 Idle, Running을 넣어주면 더 부드럽게 움직인다. 위 그래프에 ctrl을 누르고 해당 좌표엣의 움직임을 볼 수 있다.
그 다음 애니메이션 -> 애니메이션 블루프린트 파일을 하나 만들어준다. 애니메이션 블루프린트는 캐릭터의 애니메이션을 제어하고 관리하기 위한 특수한 블루프린트이다.
생성시 Output Pose라는 노드가 하나 보인다. 이는 애니메이션이 실행할 최종 노드이다. Result에서 선을 연결해 State Machine을 생성해준다. 이는 애니메이션의 상태 기계로 캐릭터의 애니메이션 상태를 관리하는 노드이다. 이 상태 기계를 더블클릭하면
이렇게 애니메이션 실행칸 Entry가 있는데 오른쪽 화살표를 이어 스테이트 추가를 한다.
이름을 Idle/Move로 짓고 이 노드를 더블클릭하면
Output Animatiuon Pose 노드가 있는데 이 Result를 연결 후 몬스터로 만든 블랜드 스페이스를 검색하면 Blendspace Player '블랜드 스페이스 이름' 이 뜨는데 이를 클릭해주면 우리가 만든 블랜드 스페이스 애니메이션을 실행하게된다.
여기서 Rotation과 Speed를 캐릭터 블루프린트 클래스의 방향과 속도를 받기 위해 함수를 추가해준다.
오른쪽 아래에 캐릭터 블루프린트 클래스의 방향과 속도를 받기 위한 함수(GetMovement)와 변수 CharacterData를 만들어준다. CharacterData의 변수 타입은 변수타입 검색창에 우리가 만든 캐릭터 블루프린트의 이름을 검색한다음 오브젝트 레퍼런스를 클릭해주면 된다. 그럼 캐릭터 블루프린트 클래스의 정보를 바탕으로 한 변수로 만들 수 있다.
애니메이션 이벤트그래프에서 시작 시 캐릭터의 정보를 변수 CharacterData에 저장한 다음
GetMovement함수는 위와 같이 방향과 속도를 계산하고 이를 반환하는 함수로 만든다음 이 함수의 디테일 창에서 '퓨어'를 클릭해주면 된다. 이를 클릭하면 순수하게 방향과 속도를 반환하는 함수가 된다.
그리고 만든 함수를 Idle/Move에서 위와 같이 이어준다.
가만히 있을 때 두리번 거리고 달리기 모션이 나오는 것을 볼 수 있다. 하지만 앞으로 달리기만 구현했기 때문에 옆으로 달리기는 어색하다. 하지만 이는 옆, 뒤로 달리는 모션 에셋을 다운받은 후 블랜드 스페이스에서 적절히 위치시키면 자연스럽게 움직이게 할 수 있다.