언리얼 기본

애니메이션 블루프린트와 블렌드 스페이스

dkuen 2026. 2. 3. 16:45

1. 애니메이션 에셋

1-1. 애니메이션 블루프린트(ABP)란?

애니메이션 블루프린트(Animation Blueprint)는 스켈레탈 메시의 애니메이션 로직과 상태 전환(State Machine), 이벤트(Event Graph) 등을 시각적으로 설계할 수 있는 시스템입니다.

 

애니메이션 블루프린트 생성

 

 

SK_Bot 생성

 

ABP_Character로 이름을 짓습니다.

 

기존의 블루프린트와 다른점은

 

기존의 블루프린트는 뷰포트와 이벤트 그래프가 있지만,

1-2. ABP의 그래프

애니메이션 블루프린트는

 

이벤트 그래프와 AnimGraph가 있습니다.

 

AnimGraph

오른쪽 디테일 패널 밑에 에셋 브라우저에서

 

A_Bot_Idle 가져와서 연결합니다.

하지만 이는 해당 ABP_Character에만 적용된 것이기 때문에 BP_Character에 적용해보겠습니다.

BP로 넘어와서 최상위 클릭

 

디테일 패널에서 애님 클래스에 방금 만든 클래스를 넣어줍니다.

1-3. 애니메이션 에셋의 종류

애니메이션 시퀸스(Animation Sequenece)

- 걷기, 뛰기, 공격 등 단일 모션이 들어있는 파일

애니메이션 몽타주(Animation Montage)

- 여러 시퀸스를 재생 구간별로 편집, 합칠 수 있는 특수 에셋 (주로 특정 이벤트 처리에 사용)

블렌드 스페이스(Blend Space)

- 여러 애니메이션 시퀸스를 축 값(X/Y)에 따라 자연스럽게 섞어(Blend) 재생하기 위한 에셋

2. 블렌드 스페이스

2-1. 블렌드 스페이스를 쓰는이유

단순하게 걷기 애니메이션과 뛰기 애니메이션을 구분해서 재생하면, 애니메이션 전환시 부ㅠ드러운 연결이 어려울 수 있습니다.

블렌드 스페이스를 사용하면 속도 값 등 특정 파라미터에 따라 걷기(Walk)와 뛰기(Run)를 연속적으로 자연스럽게 섞어 재생이 가능합니다.

2-2. 블렌드 스페이스 만들기

 

Anim 새파일 만들겠습니다.

 

 

SK_Bot

이렇게 만들어줍니다.

 

더블 클릭해서 열어주시고

 

중앙 밑에는 x축과 y축을 사용하는 그래프 입니다.

지금은 가로축은 사용하지 않겠습니다.

 

왼쪽 에셋 디테일 패널에서 세로 축 이름을 Speed로 바꿔줍니다.

 

 

이렇게 설정하시고

 

그래프 화면은 이렇게 세팅됩니다.

 

 

에셋 브라우저에서 Idle 왼쪽 그래프 패널로 드래그해서 넣어주시고

A_Bot_Run도 가져와서 넣어줍니다.

그럼 이렇게 설정됩니다 ctrl로 해당 속도에서 애니메이션을 확인 할 수 있습니다.

3. 스테이트머신(State Machine) 맛보기

상태(State) + 기계(Machine)라는 두 단어가 결합된 말입니다.

- 상태(State)는 시스템(또는 객체)이 현재 어떤 조건에 놓여 있는지를 뜻합니다.

- 기계(Machine)는 이벤트에 따라 내부적으로 작동하거나 변환이 일어나는 장치입니다.

소프트웨어, 게임 개발, 전자 회로 설계등 다양한 분야에서 "정해진 여러 상태 중 하나에 있으면서 특정 입력이나 사건(Event)에 의해 다른 상태로 전이(Transition)한다"라는 모델을 가리킬 때 널리 사용합니다.

3-1. ABP의 이벤트 그래프에서 속도값 수집

ABS 패널로 넘어와서 기존의 노드 삭제하고 BS_RunWalk 넣어줍니다.

 

왼쪽 밑에서 변수 Float(실수)형 Speed라는 변수 만들어서 끌고와서 Get Speed 누르고 이어주면 됩니다.

현제 Speed 변수에는 아무런 값이 담겨있지 않지만 이 값을 애니메이션에서 사용하는 Speed로 쓸 예정입니다.

 

이벤트그래프로 넘어와서 Set Speed

 

왼쪽 Event Blueprint Update Animation 은 애니메이션이 변경되면 이벤트가 실행이됩니다

오른쪽 Try Get Pawn Owner은 이 애니메이션이 적용된 Pawn(여기서는 BP_Character)의 정보를 가져오는 겁니다.

get Velocity(속도) 연결합니다.

저희가 필요한건 X축과 Y축 값만 필요합니다.

 

Return Value 구조체 핀분할을 해서 X와 Y만 쓰겠습니다.

 

make vector 찾아서

요렇게 연결해주시면 됩니다.

그 다음은 Vector Length(스칼라) 연결해주시면 됩니다.

캐릭터 찾기 > 캐릭터의 속도(Z축 즉 점프 같은 행동은 무시)를 가져옴 > 그 속도값으로 새 벡터를 만듦 > Vector의 Length는 스칼라, 즉 방향이 없는 속력을 가져 올 수 있습니다.

그다음 요거 찾아서 만들어서,

요렇게 만들면 됩니다.

 

꼭 ?가 달려있는 is Valid를 추가해주시고

is Valid는 유효한지 판단하는 노드입니다.

여기서는 Pawn Owner가 정말 존재하는지를 체크하고 있습니다.

3-2. 스테이트에 적용

뛰는 상태만 사용하는 것이 아니기 때문에 스테이트 머신을 사용해서 만들어 보겠습니다.

 

애니메이션 탭에있는 state machine 만들어줍니다.

더블클릭해서 들어갑니다.

 

들어오면 이런 모습이실텐데

스테이트 추가

 

이렇게 2개만 추가하겠습니다.

 

Idle 더블클릭 해주시고

 

Idle 애니메이션 시퀸스 가져와서 연결해줍니다.

 

Run도 똑같이 BS_RunWalk 가져와서 만들어줍니다.

Run 시퀸스를 사용하면 부드럽게 움직이지 않습니다.

 

돌아오셔서 이렇게 화살표 연결해줍니다.

시작은 Idle이고 Idle은 뛰어갈 수도 다시 대기 할 수도 있습니다.

 

요렇게 마우스 커서를 올려다 놓으면 위 상태로 변환되는 룰(조건)을 만들 수 있습니다.

더블클릭해주시고,

Idle에서 Run이 되는 조건은 속도가 있어야겠죠?

요렇게 연결해줍니다.

 

뒤로 오셔서

Run에서 Idle 상태로 가려면 속도가 0이어야 합니다.

 

요렇게 만들어줍니다.

 

 

animGraph로 돌아오셔서 삭제하시고 이렇게 연결해주시면 됩니다.

 

3-3. 점프값 수집

점프값은 처음 IA_Jump를 만들때도 bool 값을 사용했습니다.

왜냐하면 점프는 이동과 다르게 점프를 한 상태와 안 한 상태 두가지만 있어도 충분하기 때문입니다.

 

최종적으로는 이렇게 만들어 주시면 됩니다.

 

ABP 이벤트 그래프로 돌아와서

isInAir라는 bool값 변수 하나 만들고,

Get Movement Component와

Sequence를 검색하시고 Flow Control에 있는(좀 찾으면 나옴) Sequence를 추가합니다.

그리고 is Falling을 찾아서,

 

노란 불이 들어온 형태로 만들어 주시면 됩니다.

자 Sequnce는 Then 0, 1을 순서대로 실행하는 노드입니다.

Get Movement Component는 BP_Character에 있는

이 캐릭터 무브먼트 컴포넌트 입니다.

이 컴포넌트는 is Palling값을 가지는데 캐릭터가 점프 상태라면 true, 아니라면 false입니다.

 

다음으로

AnimGraph로 돌아와서, 스테이트 머신 더블클릭

 

스테이트 에일리언스 추가를 해서 이름을 Idle/Run으로 만들어 줍니다.

에일리언스는 Idle과 Run 두가지의 상태를 처리해줍니다.

 

이렇게 만들어주시고,

 

점프는 IdleJump(RumJump도 상관 없음)

 

Fall은 Fall 애니메이션을 넣어주시고 오른쪽에 애니메이션 루프를 체크해줍니다.

 

 

fall 애니메이션이 거진 1초기 때문에 떨어지고 있을때는 계속 이 애니메이션이 반복되야합니다.

Land는 LandIdle

 

에일리언스도 추가해주시고(체크)

 

요렇게 만들어줍니다.

가만히 있거나 뛰고있을때 점프를 하면 점프 애니메이션이 실행되야 하고, 점프를 했다면 떨어저야하고, 가만히 있다가 혹은 뛰고있다가도 지형에 문제가 있다면 떨어지는 애니메이션이 실행되고, 떨어진다면 착지하는 애니메이션이 실행되어야 합니다.

 

Idle/Run > Jump,

Idle/Run > Fall 조건은

요렇게

 

Jump > Fall 조건은

더블클릭이 아니라 그냥 클릭만 하시고 디테일 패널에서

스테이트의 시퀸스 플레이어에 따른 자동 규칙을 체크해줍니다. - 쉽게 애니메이션 끝나면 자동으로 실행

 

Fall > Land 조건은

 

이렇게 합니다.

떨어진다면 > isinAir가 true고 착지한다면 isinAir가 false일텐데,

애니메이션은 true일 때 작동하기 때문에 not 연산(true라면 false, false라면 true)으로 바꿔줍니다.

Land도 실행이 끝나면 Idle상태로 전환되게 바꿔줍니다.

조건은 Jump > Fall 조건 설정할 때 와 마찬가지로 애니메이션 재생이 끝나면 바로 재생하게 만들어줍니다.