애님 그래프의 기본 구성
애니메이션 블루프린트의 이벤트 그래프와 애님 그래프를 구분하고 상태·블렌딩 노드로 최종 포즈를 구성합니다.
지금까지는 로직, 데이터 관리, UI 개발 등 다양한 측면을 살펴봤습니다.
이제 캐릭터에 생동감을 부여하는 핵심 요소인 애니메이션으로 넘어갑니다.
언리얼 엔진은 움직임 제어와 전환에 특화된 애니메이션 블루프린트(Animation Blueprint, 애님 블루프린트)를 제공합니다.
이번 장에서는 애님 블루프린트의 핵심 구성 요소인 애님 그래프(Anim Graph)의 기본 개념과 활용법을 중점적으로 다룹니다.
애님 그래프는 캐릭터의 속도, 점프 여부, 장비 상태 같은 값을 포즈 전환 규칙으로 바꾸는 실행 그래프입니다. 움직임이 자연스러우려면 상태 이름보다 전환 조건과 블렌딩 기준이 먼저 맞아야 합니다.
- 애님 블루프린트 개념
상태 1 애니메이션 블루프린트(Animation Blueprint)는 스켈레탈 메시(Skeletal Mesh)에 애니메이션을 적용하고 제어하는 애니메이션 전용 블루프린트입니다.
- 애님 그래프의 기본 구성 요소
상태 2 애님 그래프는 Sequence Player, Blend Space, State Machine 같은 노드를 연결해 캐릭터의 최종 포즈를 결정합니다.
- 애님 그래프의 흐름 (상태 전환 예시)
상태 3 애님 그래프는 보통 Entry, State, 전환 규칙, Output Pose 순서로 흐릅니다.
애님 블루프린트란 무엇인가?
애니메이션 블루프린트(Animation Blueprint)는 스켈레탈 메시(Skeletal Mesh)에 애니메이션을 적용하고 제어하는 데 사용되는 특별한 종류의 블루프린트입니다.
캐릭터의 걷기, 달리기, 점프, 공격 등 다양한 동작들을 자연스럽게 이어 붙이고, 게임 상태에 따라 적절한 애니메이션을 재생하도록 로직을 구현하는 곳이죠.
애님 블루프린트는 크게 두 가지 주요 탭으로 구성됩니다.
이벤트 그래프(Event Graph): 게임플레이 변수(예: 캐릭터의 속도, 점프 여부)를 가져와 애니메이션에 필요한 계산을 수행하거나, 애니메이션 관련 이벤트를 처리하는 곳입니다.
일반 블루프린트의 이벤트 그래프와 유사합니다.
애님 그래프(Anim Graph): 실제 애니메이션의 흐름과 상태 전환을 시각적으로 정의하는 핵심 공간입니다.
여러 애니메이션 클립을 조합하고 블렌딩(Blending)하여 최종 포즈를 생성합니다.
이번 절에서는 애님 블루프린트에서 포즈 계산을 담당하는 애님 그래프를 다룹니다.
애님 그래프의 기본 구성 요소
애님 그래프는 다양한 노드들을 연결하여 캐릭터의 최종 포즈를 결정하는 파이프라인을 구축합니다.
주요 구성 요소는 다음과 같습니다.
- 캐릭터의 특정 상태(예: Idle, Walk, Run, Jump, Attack 등)와 그 상태들 간의 전환 규칙을 정의하는 핵심적인 노드입니다.
- 각 상태 안에는 해당 상태에서 재생될 애니메이션(또는 애니메이션 블렌딩 로직)이 포함됩니다.
- 활용: 걷기 상태에서 달리기로 전환되거나, 점프 상태에서 착지 상태로 전환되는 등 캐릭터의 행동 변화에 따라 애니메이션을 자연스럽게 바꾸는 데 사용됩니다. 가장 보편적이고 중요한 애님 그래프의 구성 요소입니다.
- 2D 또는 1D 공간에서 여러 개의 애니메이션 클립을 보간(Interpolate)하여 연속적인 애니메이션을 생성하는 에셋입니다.
- 활용: 캐릭터의 이동 속도(0 ~ 600)나 방향(0 ~ 360도)에 따라 걷기, 달리기, 뛰기 애니메이션을 부드럽게 블렌딩하여 자연스러운 움직임을 만듭니다. 애님 그래프 내에서는 블렌드 스페이스 플레이어(Blend Space Player) 노드 형태로 사용됩니다.
- 여러 애니메이션 시퀀스(Animation Sequence)를 시간축에 배치하여 하나의 복합적인 애니메이션을 만드는 에셋입니다. 특정 액션(공격, 스킬 사용, 피격 등)처럼 한번 재생되고 끝나는 애니메이션에 주로 사용됩니다.
- 활용: 평상시에는 걷기/달리기 애니메이션을 재생하다가, 공격 버튼을 누르면 공격 애니메이션 몽타주를 재생하여 캐릭터의 상체가 공격 애니메이션을 하는 동안 하체는 계속 이동 애니메이션을 유지하는 등, 복잡한 레이어드 애니메이션에 유용합니다. 애님 그래프 내에서는 슬롯(Slot) 노드를 통해 몽타주를 재생합니다.
- 여러 포즈를 조합하거나 블렌딩하는 노드들입니다.
Blend Poses by Bool: 특정 불리언 값에 따라 두 포즈를 전환합니다. (예: 점프 중/아님)Blend Poses by Int/Blend Poses by Enum: 정수나 열거형 값에 따라 여러 포즈 중 하나를 선택하거나 블렌딩합니다. (예: 무기 타입에 따른 공격 포즈)Layered Blend Per Bone: 특정 뼈대(Bone)까지만 상위 포즈를 적용하고 그 이하의 뼈대는 하위 포즈를 유지하여, 복합적인 애니메이션을 만듭니다. (예: 하체는 걷고 상체는 총을 겨누는 동작)
- 단순히 특정 애니메이션 시퀀스 에셋을 재생하는 노드입니다. 주로 스테이트 머신 내부의 상태에서 사용됩니다.
- 애님 그래프의 최종 결과물입니다. 모든 노드들의 연결이 이 노드로 끝나야 합니다. 이 노드를 통해 계산된 최종 포즈가 스켈레탈 메시에 적용되어 캐릭터가 화면에 그려집니다.
애님 그래프를 읽을 때는 이벤트 그래프가 만든 변수와 애님 그래프가 만든 포즈가 어디서 만나는지 먼저 잡아두면 전체 구조가 선명해집니다.
Pawn 속도와 점프 상태는 이벤트 그래프에서 갱신하고, 애님 그래프는 그 값으로 상태를 전환한다.
- Event Graph
Try Get Pawn Owner 소유 Pawn 참조 획득 Get Velocity 속도 벡터 계산 Set Speed Float 변수로 저장 Is In Air? 점프 상태 bool 저장
- Anim Graph
State Machine Idle, Walk, Jump 상태 선택 Blend 속도에 따라 포즈 섞기 Final Pose 스켈레탈 메시로 출력
| 검수 | 의미 |
|---|---|
| 핵심 | 이벤트 그래프는 데이터 준비, 애님 그래프는 포즈 결정이다. |
| 검수 | Anim Graph가 직접 Pawn을 찾지 않고 변수만 소비하는지 본다. |
애님 그래프의 흐름 (간단한 예시)
변수로 상태를 고르고 전환 규칙을 통과한 뒤 Blend Space와 State Machine이 포즈를 만든다.
- Variables
Speed, IsInAir 갱신 값
- State Machine
Idle / Walk / Jump 선택
- Transition Rule
전환 조건 평가
- Blend
속도에 따라 포즈 보간
- Final Pose
스켈레탈 메시로 출력
| 점검 | 기준 |
|---|---|
| 좋은 그래프 | 변수, 상태, 전환, 포즈가 순서대로 분리되어 보인다. |
| 위험 | 상태 전환 조건이 복잡해져 어디서 포즈가 바뀌는지 숨겨진다. |
가장 기본적인 애님 그래프의 흐름은 다음과 같습니다.
출력 포즈(Output Pose) < Default State Machine < Idle / WalkRun (상태) < Animation Sequence Player 또는 Blend Space Player (상태 내의 애니메이션)
- 캐릭터의 스켈레톤을 기반으로 새로운 애님 블루프린트를 생성합니다. (콘텐츠 브라우저에서 스켈레톤 우클릭 >
애님 블루프린트 생성(Create Anim Blueprint))
- 생성된 애님 블루프린트 에디터를 엽니다. 기본적으로
Output Pose와Default State Machine노드가 연결되어 있을 것입니다.
스테이트 머신 진입: Default State Machine 노드를 더블클릭하여 내부로 진입합니다.
- 빈 공간에 마우스 우클릭 >
상태 추가(Add State)를 선택하여Idle상태를 추가합니다. - 다시
상태 추가를 선택하여WalkRun상태를 추가합니다.
Idle상태에서 드래그하여WalkRun상태로 선을 연결합니다. 이 선은 전환 규칙(전환 규칙)을 나타냅니다.- 연결된 선을 더블클릭하여 전환 규칙 그래프를 엽니다.
- 이 그래프에서
Can Enter Transition출력 핀에 연결될 조건을 만듭니다. (예: 캐릭터의Speed변수(이벤트 그래프에서 업데이트된)가 0보다 큰지 여부) WalkRun상태에서Idle상태로도 선을 연결하고, 전환 규칙 그래프에서Speed변수가 0과 같은지 확인하는 조건을 만듭니다.
- 각 상태(예:
Idle)를 더블클릭하여 내부 그래프를 엽니다. Idle상태 내에서는Animation Sequence Player노드를 추가하고,Animation Sequence핀에 캐릭터의Idle애니메이션 시퀀스 에셋을 연결한 후Output Pose노드에 연결합니다.WalkRun상태 내에서는Blend Space Player노드를 추가하고,Blend Space핀에 캐릭터의WalkRun블렌드 스페이스 에셋을 연결한 후Output Pose노드에 연결합니다. (이때WalkRun블렌드 스페이스의 입력 핀에Speed변수를 연결해야 합니다.)
Idle, WalkRun, Jump 같은 상태는 변수 값이 기준을 넘는지로 전환된다.
| 질문 | 판정 |
|---|---|
| Speed가 0에 가까운가? | Idle 상태를 유지한다. |
| Speed가 이동 임계값을 넘는가? | WalkRun 또는 Blend Space로 전환한다. |
| IsInAir가 true인가? | Jump/Fall 상태가 우선된다. |
| 전환이 너무 자주 흔들리나? | 히스테리시스나 최소 유지 시간을 둔다. |
애님 그래프에서는 캐릭터 움직임과 상태를 노드로 정의하고, 변수 값에 따라 포즈 계산 흐름을 조정할 수 있습니다.
애님 그래프를 구성할 때는 상태, 전환 규칙, 블렌딩 노드의 책임을 나누어 보면 디버깅 순서가 분명해집니다.
최종 포즈가 어색할 때는 변수 입력, 전환 조건, 상태 내부 포즈 생성을 순서대로 분리해 확인합니다.
- 상태 선택
State Machine 캐릭터의 큰 동작 단위를 나누고 전환 규칙으로 다음 상태를 정합니다.
- 연속 값을 섞는다
Blend Space 이동 속도나 방향에 따라 걷기와 달리기 포즈를 부드럽게 보간합니다.
- 일회성 액션을 얹는다
Montage Slot 기본 이동 위에 공격이나 피격처럼 타이밍이 중요한 동작을 재생합니다.
이번 절에서는 애님 블루프린트의 핵심인 애님 그래프의 기본 구성 요소와 간단한 스테이트 머신 예시를 통해 그 작동 원리를 알아보았습니다.
애님 그래프를 이해하는 것은 언리얼 엔진에서 캐릭터 애니메이션을 제어하는 데 가장 중요한 첫걸음입니다.
마지막으로 애님 그래프가 올바른 포즈를 만들도록 변수 갱신 경로와 포즈 출력 기준을 정리합니다.
Anim Graph는 포즈를 만들고 Event Graph는 Speed, IsInAir 같은 판단 변수를 갱신합니다.
- 포즈 계산과 변수 갱신을 분리
Event Blueprint Update Animation에서 캐릭터 상태를 읽고, Anim Graph는 그 값을 State Machine과 Blend Space에 넣어 최종 포즈를 만듭니다. 01 Try Get Pawn Owner와 Cast To BP_PlayerCharacter가 실패할 수 있으므로 유효성 검사 뒤 변수 갱신을 진행합니다. 02 Velocity에서 Speed를 계산하고 Character Movement에서 IsFalling을 읽어 IsInAir를 설정합니다. 03 State Machine, Cached Pose, Layered Blend per Bone을 거쳐 Final Animation Pose까지 한 방향으로 연결합니다.
- 포즈 계산과 변수 갱신을 분리
Event Blueprint Update Animation에서 캐릭터 상태를 읽고, Anim Graph는 그 값을 State Machine과 Blend Space에 넣어 최종 포즈를 만듭니다.
- 소유자 확인
Try Get Pawn Owner와 Cast To BP_PlayerCharacter가 실패할 수 있으므로 유효성 검사 뒤 변수 갱신을 진행합니다.
- 변수 갱신
Velocity에서 Speed를 계산하고 Character Movement에서 IsFalling을 읽어 IsInAir를 설정합니다.
- 포즈 출력
State Machine, Cached Pose, Layered Blend per Bone을 거쳐 Final Animation Pose까지 한 방향으로 연결합니다.