UE - BP를 이용한 애니메이션 구현
BP-Animation
애니메이션 구현
이번엔 애니메이션을 추가해보자
애니메이션 생성
애니메이션을 만들기 위해 애니메이션 블루프린트를 생성한다.
콘텐츠 드로어 -> 추가 -> 애니메이션 -> 애니메이션 블루프린트
AnimGraph에서 State Machine을 생성해준다. 이름은 LocoMotion으로 생성
들어가보면 우측 하단에 에셋 브라우저에서 현재 사용중인 스켈레톤으로 플레이 가능한 애니메이션들이 보인다.
이것들로 동작을 구현할 건데, Idle, Walk, Run의 조건 차이는 속력뿐이다. 이럴 때 사용하기 좋은 에셋이 블렌드 스페이스다.
블랜드 스페이스란?
블렌드 스페이스는 애니메이션을 다양한 파라미터 값에 따라 부드럽게 전환할 수 있도록 돕는 에셋이다.
주로 캐릭터의 애니메이션을 상태 변화에 맞춰 자연스럽게 혼합하고, 이를 기반으로 동적인 애니메이션 전환을 만들 때 사용한다.
블랜드 스페이스 생성
이번엔 Idle, Walk, Run 을 속력의 변화에 맞춰 혼합할 것 이다.
다시 콘텐츠 브라우저에 가서 추가 -> 애니메이션 -> 블렌드 스페이스
좌측에 Axis Setting에서 축의 속성을 설정할 수 있다.
나는 X축의 이름을 Speed로, 최대 축 값을 500으로 늘려줬다.
이제 우측 하단의 에셋 브라우저에서 사용할 애니메이션들을 드래그 해오자.
그럼 주황 점이 생길텐데, 이걸 원하는 속도에 배치해줘야 한다.
수치는 화면 중앙의 Speed를 보고 확인/수정하면 편하다. Idle은 0, Walk는 250, Run은 500으로 배치했다.
잘 블렌딩 됐는지 확인하려면 ctrl 키를 누른 상태로 마우스를 그래프 위에서 움직여보자.
블랜드 스페이스 결과
애니메이션 블루프린트와 연결
이제 다시 애니메이션 블루프린트로 돌아와서, 방금 만든 블렌드 스페이스를 추가해보자.
그 다음, Entry의 화살표를 드래그해 연결한다. 방금 만든 블렌드 스페이스는 Speed를 기준으로 애니메이션을 혼합한다. 그러니 Speed를 받아와 블렌드 스페이스에게 전달해야 한다.
좌측의 내 블루프린트 항목을 보면 EventGraph를 찾을 수 있다. 더블 클릭하자.
UpdateEvent BlueprintUpdateAnimation은 애니메이션 업데이트 시 실행되는 노드다. Try Get Pawn Owner는 사용하는 폰을 가져오는 노드다.
Speed 구하기
- 플로트형 변수 Speed 생성.
- Pawn Owner를 내가 만든 블루프린트 캐릭터로 형변환
- 형변환한 캐릭터의 속도를 Get Velocity 노드로 가져온다.
- 속력은 속도의 크기이므로 Vector Length 노드로 속력을 구한 다음, Speed에 넣어준다.
이제 다시 AnimGraph로 이동한다. 방금 만든 블렌드 스페이스를 더블 클릭하면 이 상황인데, 여기다 Speed를 넣어주면 된다.
애니메이션 적용
이제 이 애니메이션을 적용시키자.
내가 만든 BP 캐릭터를 들어가, 우측 디테일 창에 애니메이션 항목을 찾자. 여기서 애님 클래스를 내가 만든 애니메이션 블루프린트로 선택한다.
컴파일을 완료한 다음 실행해보자.
애니메이션 적용 결과
나머지 추락, 착지를 만들어보자.
추락
보통 떨어지는 애니메이션은 추락 직후와 추락 중에 계속 실행할 애니메이션 2가지를 사용한다. Fall와 FallLoop를 StateMachine에 추가한 다음 Fall의 회색 테두리를 드래그해 FallLoop와 연결하자 그러면 흰색 화살표 위에 네모난게 생긴다.
이건 트랜지션 룰이다. 여기서 현재 상태에서 다른 상태로 넘어갈 조건을 정해줄 수 있다. 한 번만 클릭하고 디테일 창의 스테이트의 시퀀스 플레이어에 따른 자동 규칙 항목을 체크한다.
그러면 이제 Fall 애니메이션이 종료 될 때 FallLoop를 재생하게 된다.
추락 애니메이션이 플레이어의 추락 상태를 확인할 변수가 필요하다. 다시 이벤트 그래프로 돌아가자.
- 부울타입 isFalling 변수 추가
- BP캐릭터에서 Is Falling 노드 생성
- 결과를 isFalling에 저장하자
다시 스테이트 머신으로 돌아와서 스테이트 에일리어스를 추가한다.
스테이트 에일리어스는 스테이트 머신의 연결 구조를 좀 더 깔끔하게 정리할 수 있는 기능이다.
생성한 스테이트 에일리어스를 클릭해 디테일 창을 열고, 내가 만든 블렌드 스페이스를 체크한다.
그 다음 트랜지션 룰을 더블 클릭해 이렇게 조건을 정해주자
착지
다음으로는 착지를 추가하자
착지도 동작이 끝나면 idle로 돌아가니, BS와 연결해주고 스테이트의 시퀀스 플레이어에 따른 자동 규칙 항목을 활성화시킨다.
이번엔 스테이트 에일리어스를 추가해 Fall과 FallLoop를 체크한 다음 Land와 연결하자 이번 트랜지션 룰은 반대로 isFalling이 false일 때로 정해준다. not boolean을 사용하면 된다.
다 좋은데 한 가지 문제가 있다.
움직이면서 점프하면 착지할 때 어색해보인다. 그러니 추락 도중, IsFalling이 false가 될 때 속도를 비교하여 바로 BS로 넘어갈 수 있게 만들어보자.
최종 결과
자연스럽게 이어지는 모습을 볼 수 있다.