본문 바로가기

애님 그래프의 기본 구성

애니메이션 블루프린트의 이벤트 그래프와 애님 그래프를 구분하고 상태·블렌딩 노드로 최종 포즈를 구성합니다.

지금까지는 로직, 데이터 관리, UI 개발 등 다양한 측면을 살펴봤습니다.

이제 캐릭터에 생동감을 부여하는 핵심 요소인 애니메이션으로 넘어갑니다.

언리얼 엔진은 움직임 제어와 전환에 특화된 애니메이션 블루프린트(Animation Blueprint, 애님 블루프린트)를 제공합니다.

이번 장에서는 애님 블루프린트의 핵심 구성 요소인 애님 그래프(Anim Graph)의 기본 개념과 활용법을 중점적으로 다룹니다.


애님 블루프린트란 무엇인가?

애니메이션 블루프린트(Animation Blueprint)는 스켈레탈 메시(Skeletal Mesh)에 애니메이션을 적용하고 제어하는 데 사용되는 특별한 종류의 블루프린트입니다.

캐릭터의 걷기, 달리기, 점프, 공격 등 다양한 동작들을 자연스럽게 이어 붙이고, 게임 상태에 따라 적절한 애니메이션을 재생하도록 로직을 구현하는 곳이죠.

애님 블루프린트는 크게 두 가지 주요 탭으로 구성됩니다.

이벤트 그래프(Event Graph): 게임플레이 변수(예: 캐릭터의 속도, 점프 여부)를 가져와 애니메이션에 필요한 계산을 수행하거나, 애니메이션 관련 이벤트를 처리하는 곳입니다.

일반 블루프린트의 이벤트 그래프와 유사합니다.

애님 그래프(Anim Graph): 실제 애니메이션의 흐름과 상태 전환을 시각적으로 정의하는 핵심 공간입니다.

여러 애니메이션 클립을 조합하고 블렌딩(Blending)하여 최종 포즈를 생성합니다.

이번 절에서는 애님 블루프린트에서 포즈 계산을 담당하는 애님 그래프를 다룹니다.


애님 그래프의 기본 구성 요소

애님 그래프는 다양한 노드들을 연결하여 캐릭터의 최종 포즈를 결정하는 파이프라인을 구축합니다.

주요 구성 요소는 다음과 같습니다.

스테이트 머신 (State Machine)
  • 캐릭터의 특정 상태(예: Idle, Walk, Run, Jump, Attack 등)와 그 상태들 간의 전환 규칙을 정의하는 핵심적인 노드입니다.
  • 각 상태 안에는 해당 상태에서 재생될 애니메이션(또는 애니메이션 블렌딩 로직)이 포함됩니다.
  • 활용: 걷기 상태에서 달리기로 전환되거나, 점프 상태에서 착지 상태로 전환되는 등 캐릭터의 행동 변화에 따라 애니메이션을 자연스럽게 바꾸는 데 사용됩니다. 가장 보편적이고 중요한 애님 그래프의 구성 요소입니다.
블렌드 스페이스 (Blend Space)
  • 2D 또는 1D 공간에서 여러 개의 애니메이션 클립을 보간(Interpolate)하여 연속적인 애니메이션을 생성하는 에셋입니다.
  • 활용: 캐릭터의 이동 속도(0 ~ 600)나 방향(예: Calculate Direction의 -180 ~ 180도)에 따라 걷기, 달리기, 뛰기 애니메이션을 부드럽게 블렌딩하여 자연스러운 움직임을 만듭니다. 애님 그래프 내에서는 블렌드 스페이스 플레이어(Blend Space Player) 노드 형태로 사용됩니다.
애님 몽타주 (Anim Montage)
  • 여러 애니메이션 시퀀스(Animation Sequence)를 시간축에 배치하여 하나의 복합적인 애니메이션을 만드는 에셋입니다. 특정 액션(공격, 스킬 사용, 피격 등)처럼 한 번 재생되고 끝나는 애니메이션에 주로 사용됩니다.
  • 활용: 평상시에는 걷기/달리기 애니메이션을 재생하다가, 공격 버튼을 누르면 공격 애니메이션 몽타주를 재생하여 캐릭터의 상체가 공격 애니메이션을 하는 동안 하체는 계속 이동 애니메이션을 유지하는 등, 복잡한 레이어드 애니메이션에 유용합니다. 애님 그래프의 슬롯(Slot) 이름을 몽타주와 맞추고, 상체만 적용하려면 Layered Blend Per Bone의 뼈대 필터나 블렌드 마스크도 설정합니다.
포즈 블렌딩 노드
  • 여러 포즈를 조합하거나 블렌딩하는 노드들입니다.
  • Blend Poses by Bool: 특정 불리언 값에 따라 두 포즈를 전환합니다. (예: 점프 중/아님)
  • Blend Poses by Int / Blend Poses by Enum: 정수나 열거형 값에 따라 여러 포즈 중 하나를 선택하거나 블렌딩합니다. (예: 무기 타입에 따른 공격 포즈)
  • Layered Blend Per Bone: 기준 포즈에 다른 포즈를 뼈대별 가중치로 섞습니다. Branch Filter의 시작 뼈대와 자손 범위 또는 Blend Mask로 적용 부위를 정합니다. (예: 하체는 걷고 상체는 총을 겨누는 동작)
애니메이션 시퀀스 플레이어 (Animation Sequence Player)
  • 단순히 특정 애니메이션 시퀀스 에셋을 재생하는 노드입니다. 주로 스테이트 머신 내부의 상태에서 사용됩니다.
파이널 애님 포즈 (Final Animation Pose)
  • 애님 그래프의 최종 결과물입니다. 모든 노드들의 연결이 이 노드로 끝나야 합니다. 이 노드를 통해 계산된 최종 포즈가 스켈레탈 메시에 적용되어 캐릭터가 화면에 그려집니다.

애님 그래프를 읽을 때는 이벤트 그래프가 만든 변수와 애님 그래프가 만든 포즈가 어디서 만나는지 먼저 잡아 두면 전체 구조가 선명해집니다.

GAMEPLAY DATA · ANIMATION POSE

이벤트 그래프는 값을 갱신하고 애님 그래프는 포즈를 만듭니다

지상 이동 예제에서 Event Graph가 유효한 소유 Pawn의 XY 속도로 Speed를 갱신합니다. State Machine의 전환 규칙과 상태 내부 Player는 그 값을 사용해 Output Pose를 구성합니다.

변수 공급과 포즈 출력점선은 이벤트 그래프의 변수 공급, 실선은 State Machine에서 최종 출력으로 전달되는 포즈다.Speed 갱신읽기Event Graph소유 Pawn 유효성 확인Speed 변수지상 속도 XYState Machine상태 내부 Player의 포즈OutputPose
변수 공급과 포즈 출력점선두개는EventGraph에서Speed를갱신하고StateMachine이변수를읽는관계다.실선은StateMachine에서최종OutputPose로전달되는포즈이며일반실행선이아니다.
Event Graph소유 Pawn 유효성 확인
갱신갱신Event Graph · 소유 Pawn 유효성 확인 → Speed 변수 · 지상 속도 XY
Speed 변수지상 속도 XY
변수 읽기변수 읽기Speed 변수 · 지상 속도 XY → State Machine · 상태 내부 Player의 포즈
State Machine상태 내부 Player의 포즈
포즈포즈State Machine · 상태 내부 Player의 포즈 → Output Pose · 최종 포즈
Output Pose최종 포즈

점선은 데이터 공급, 실선은 포즈 연결입니다. 일반 Blueprint 실행 선을 뜻하지 않습니다.

두 종류의 연결을 따로 읽습니다

변수는 상태 선택·블렌딩의 입력이고 포즈는 애니메이션 평가의 결과입니다. 모든 게임플레이 이벤트가 이 포즈 경로를 한 번씩 실행한다는 뜻은 아닙니다.


애님 그래프의 흐름 (간단한 예시)

가장 기본적인 애님 그래프의 흐름은 다음과 같습니다.

아래 에셋 이름은 예시이며 프로젝트에 자동으로 생기는 이름이 아닙니다. 실제로 적용할 Skeletal Mesh와 호환되는 Skeleton, Idle 시퀀스, 이동 시퀀스를 먼저 준비합니다. 아직 이동용 Blend Space가 없다면 다음 두 절에서 축·샘플을 만든 뒤 이 연결을 완성합니다. 이 절의 0 기준은 연결을 읽는 간단한 예이고, 다음 절의 실습은 미세한 속도를 구분하는 0.1 기준을 사용합니다.

상태 내부의 Animation Sequence Player 또는 Blend Space Player가 포즈를 만들고, State Machine이 활성 상태와 전환 블렌드를 평가하여 최종 Output Pose에 전달합니다. 이 연결은 일반 이벤트 그래프의 실행 핀이 아니라 포즈 연결입니다.

예시: Idle/Walk/Run 스테이트 머신
애님 블루프린트 생성
  • 캐릭터의 스켈레톤을 기반으로 새로운 애님 블루프린트를 생성합니다. (콘텐츠 브라우저에서 스켈레톤 우클릭 > 애님 블루프린트 생성(Create Anim Blueprint))
애님 그래프 열기
  • 생성된 애님 블루프린트 에디터를 엽니다. State Machine이 없다면 추가하고 이름을 Default State Machine으로 정한 뒤, 포즈 출력을 최종 Output Pose에 연결합니다.

스테이트 머신 진입: Default State Machine 노드를 더블클릭하여 내부로 진입합니다.

상태 추가
  • 빈 공간에 마우스 우클릭 > 상태 추가(Add State)를 선택하여 Idle 상태를 추가합니다.
  • 다시 상태 추가를 선택하여 WalkRun 상태를 추가합니다.
  • Entry를 Idle에 연결해 초기 상태를 정합니다.
상태 간 전환 규칙 정의
  • Idle 상태에서 드래그하여 WalkRun 상태로 선을 연결합니다. 이 선은 전환 규칙을 나타냅니다.
  • 연결된 선을 더블클릭하여 전환 규칙 그래프를 엽니다.
  • 이 그래프에서 Can Enter Transition 출력 핀에 연결될 조건을 만듭니다. (예: 캐릭터의 Speed 변수(이벤트 그래프에서 업데이트된)가 0보다 큰지 여부)
  • WalkRun 상태에서 Idle 상태로도 선을 연결하고, 전환 규칙 그래프에서 Speed 변수가 0과 같은지 확인하는 조건을 만듭니다.
상태 내부 애니메이션 지정
  • 각 상태(예: Idle)를 더블클릭하여 내부 그래프를 엽니다.
  • Idle 상태 내부에 해당 애니메이션 시퀀스 에셋을 드래그해 플레이어 노드를 만들고 Output Pose에 연결합니다.
  • WalkRun 상태 내부에 속도 축을 쓰는 Blend Space 에셋을 드래그하고 포즈 출력을 Output Pose에, Speed 변수를 속도 입력에 연결합니다.
  • 캐릭터의 Mesh에서 Animation Mode를 Use Animation Blueprint, Anim Class를 만든 애님 블루프린트로 지정합니다.

애님 그래프에서는 캐릭터 움직임과 상태를 노드로 정의하고, 변수 값에 따라 포즈 계산 흐름을 조정할 수 있습니다.

포즈가 메시까지 도달하는지 확인하기

상태 내부의 Idle Player는 연결했지만, 바깥 AnimGraph의 State Machine 출력은 최종 Output Pose에서 끊겨 있습니다. Event Graph의 Speed 값이 정상적으로 변한다는 관찰만으로 그 상태 머신의 포즈가 메시를 바꾼다고 결론 내릴 수 있을까요?

데이터 갱신과 최종 포즈 연결 구분하기

결론 내릴 수 없습니다. Speed는 입력 데이터이며 포즈를 적용하는 연결을 대신하지 않습니다. 상태 내부 Player → 상태의 Output Pose, 바깥 State Machine → 최종 Output Pose, 메시의 Anim Class를 차례로 확인합니다. 상태 내부가 완성된 사실과 메시가 그 애님 블루프린트를 사용하는 사실은 각각 확인해야 합니다.