애니메이션 블루프린트(Animation Blueprints) 을 사용하는 기본 방법은 애님 그래프(Anim Graph) 및 이벤트 그래프(Event Graph) 에서 로직을 생성하는 것입니다. 이렇게 생성한 로직으로 블루프린트의 포즈 비헤이비어, 변수 및 기타 프로퍼티를 정의합니다. 이러한 그래프는 함께 작동하여 주어진 프레임에 캐릭터의 최종 출력 포즈를 제공합니다.
이 문서에서는 애님 그래프, 이벤트 그래프, 그리고 애니메이션 블루프린트에서 그래프 사용 방법에 대해 간략하게 살펴봅니다.
전제조건
- 애니메이션 블루프린트를 만들어서 열어두어야 합니다.
- 블루프린트 비주얼 스크립팅에 대해 기본적으로 이해하고 있어야 합니다. 애니메이션 블루프린트의 인터페이스와 행동이 여기서 파생됩니다.
애님 그래프
애님 그래프에서는 캐릭터에 대한 애니메이션별 로직을 생성합니다. 여기에는 일반적으로 블렌딩, 본 트랜스폼, 로코모션 및 기타 비슷한 애니메이션 이펙트를 제어하는 노드 생성이 포함됩니다. 애님 그래프 안에서 함수나 이벤트 그래프에서 계산된 값을 사용한 다음, 그러한 변수를 블렌드 스페이스와 같은 애님 그래프 노드의 입력으로 연결할 수 있습니다. 노드와 노드의 값이 결합된 이펙트는 프레임마다 캐릭터의 최종 포즈가 정의되는 Output Pose 에 연결됩니다.

기본 예시로, 애님 그래프에 애니메이션 시퀀스를 참조하는 Sequence Player 노드를 생성할 수 있습니다. 이 노드를 Output Pose 노드에 연결한 다음, 툴바에서 컴파일(Compile) 을 클릭합니다. 이제 Sequence Player 가 애니메이션을 계속 재생하므로 애니메이션이 무한 재생되는 것을 볼 수 있습니다.

노드 생성 및 연결
블루프린트와 마찬가지로, 그래프를 우클릭하고 노드를 선택하여 노드를 생성할 수 있습니다.

포즈(Pose) 정보를 출력하는 노드를 생성하면, 이 노드를 Output Pose 노드 같은 다른 포즈 핀에 연결할 수 있습니다. 일반적으로, 노드를 생성하고 연결하려면 블루프린트를 리컴파일해야 합니다.

애님 그래프에서는 여러 가지 노드 타입을 생성할 수 있습니다. 이러한 노드 타입에 대한 자세한 내용은 애니메이션 노드 레퍼런스 페이지를 참조하세요.
실행 흐름 및 정보
포즈 아이콘 으로 표시되는 포즈 연결 은 연결선을 따라 맥동하는 링크로 실행이 표시됩니다. 블루프린트의 이벤트 그래프 같은 일반 그래프의 경우, 이 흐름은 이벤트 발동에 따라 달라지므로 재생 중에 시각화됩니다. 애님 그래프는 이벤트 기반이 아니고 프레임마다 평가되므로 항상 실행 흐름이 표시된다는 점이 다릅니다.

애님 그래프에서 실행 흐름은 포즈가 하나의 노드에서 다른 노드로 전달되는 것을 나타냅니다. Blends 같은 일부 노드에는 여러 개의 입력이 있으며 어떤 입력이 현재 실행 흐름에 포함되는지 내부적으로 결정됩니다. 이러한 결정은 보통 데이터 핀에 전달된 값과 같은 몇몇 외부 입력에 의존합니다. 이 예시에서는 Blend 노드의 알파(Alpha) 값을 0 또는 1 로 설정하여 들어오는 각 포즈의 평가를 활성화하거나 비활성화합니다.

포즈와 노드에는 연결된 핀과 노드의 아이콘 사이에 병렬 실행선으로 표시되는 내부 어트리뷰트가 여러 개 포함될 수도 있습니다. 이 정보는 애니메이션 포즈와 함께 전송되는 추가 어트리뷰트를 전달합니다.

어트리뷰트 목록은 다음과 같습니다.
어트리뷰트 | 아이콘 | 설명 |
---|---|---|
커브(Curves) | ![]() |
애님 커브 데이터를 전달합니다. |
어트리뷰트(Attributes) | ![]() |
애니메이션 어트리뷰트 데이터를 전달합니다. |
동기화(Sync) | ![]() |
동기화 그룹 데이터를 전달합니다. |
루트 모션(Root Motion) | ![]() |
루트 모션 데이터를 전달합니다. |
관성 블렌딩(Inertial Blending) | ![]() |
관성화 데이터를 전달합니다. 이 표시자는 Inertialization 노드가 요청된 경우에만 나타나는데, 일반적으로는 이는 블렌드가 발생할 때에 해당합니다. |
노드 함수
애님 그래프의 노멀 노드 실행과 함께 노드의 실행 단계 중에 호출할 함수를 지정할 수도 있습니다. 이를 통해 관련 노드 및 함수 내에 구성되는 훨씬 관리하기 쉬운 로직을 생성할 수 있습니다. 또한, 노드가 활성화될 때만 이러한 이벤트가 호출되므로 CPU 리소스도 절약할 수 있습니다.
이러한 함수 프로퍼티에 액세스하려면 애님 그래프 에서 원하는 애니메이션 노드 를 선택하고 디테일(Details) 패널에서 함수(Functions) 프로퍼티 카테고리를 찾으면 됩니다.

다음과 같은 함수 프로퍼티를 사용할 수 있습니다.
함수 타입 | 설명 |
---|---|
초기 업데이트 시(On Initial Update) | 이 함수는 게임플레이 또는 시뮬레이션 중에 한 번만 실행됩니다. 노드가 처음 연관성이 생기면 연관성이 생길 시(On Become Relevant) 전에 실행됩니다. 노드가 반복적으로 연관성이 생길 경우 재실행되지 않습니다. |
연관성이 생길 시(On Become Relevant) | 이 함수는 노드가 처음 연관성이 생기면 초기 업데이트 시 후에 실행됩니다. 또한, 노드가 블렌딩이 켜지고 꺼지고 다시 켜지는 등, 반복적으로 연관성이 생길 경우에도 재실행됩니다. |
업데이트 시(On Update) | 이 함수는 노드가 연관성이 있는 한 계속해서 틱마다 실행됩니다. 연관성이 생길 시 실행 후에 실행이 시작됩니다. |
애님 그래프에서 연관성 콘셉트는 노드가 평가되는지 여부를 나타냅니다. 블렌드 노드나 스테이트 머신을 사용하는 경우처럼 노드가 평가되지 않는 경우, 일부 노드는 완전히 비활성화될 수도 있습니다. 이렇게 되면, 해당 노드는 연관성이 없는 것입니다. 현재 Output Pose에 기여하는 노드만 연관성이 있는 것으로 간주합니다.
이 예시에서 Aim Offset 노드는 연관성이 없는데, 왜냐하면 Blend 노드가 입력 A 에 완전히 블렌딩되기 때문입니다.

새 함수 를 추가하려면 선택한 프로퍼티 에 대한 드롭다운 메뉴 를 클릭하고 바인딩 생성(Create Binding) 을 선택합니다. 그러면 애니메이션 블루프린트에 대한 새 함수가 생성되고 함수 프로퍼티에 바인딩됩니다.

이 방법으로 함수를 생성하면, 함수와 연관된 노드에 함수를 링크하는 데 사용하는 입력 핀이 자동으로 생성됩니다. 이러한 핀은 선택 사항이 경우도 있지만, 함수를 사용하여 노드의 현재 스테이트를 읽는 경우에는 필수입니다.
- 컨텍스트(Context): 노드가 델타 시간이나 관성화 요청 같은 노드에 연관성이 있는 데이터를 전달하도록 허용합니다.
- 노드(Node): 노드가 이 핀을 통해 노드 자체를 전달하도록 허용합니다. 일반적으로 변환(Convert) 함수를 사용하여 이러한 핀을 특정 노드 타입으로 변환해야 합니다.

함수를 노드에 할당하면 노드에 함수 이름이 표시되어 할당되었음을 나타냅니다. 이 예시에서는 캐릭터의 회전을 가져오고 피치 및 요 값을 설정하기 위한 에임 오프셋 로직이 함수 내에 모두 포함되어 있습니다. 이 로직은 이벤트 그래프에 있을 때처럼 영구적으로 실행되는 것이 아니라 이 노드가 업데이트되는 동안에만 실행되므로 퍼포먼스 비용이 감소합니다.

프로퍼티 액세스
다양한 자동화된 함수가 포함된 프로퍼티 액세스 기능을 사용하여 세팅 프로퍼티를 더 신속하게 가져오고 설정할 수 있습니다. 프로퍼티 액세스는 프로퍼티 가져오기 인스턴스와 중복된 연결, 전반적인 그래프 복잡성을 줄이는 데 유용합니다. 또한, 프로퍼티 액세스를 통해 스레드 세이프 방식으로 애니메이션 그래프에 게임플레이 데이터를 자동으로 제공할 수도 있습니다.
이 기능은 기본적으로 다음 두 가지 방법으로 사용할 수 있습니다.
노드 사용
프로퍼티 액세스 노드 를 생성하려면, 애님 그래프 에서 우클릭한 다음 변수(Variables) 카테고리에서 프로퍼티 액세스(Property Access) 를 선택합니다.

추가한 다음에는 Get 함수에 바인딩해야 합니다. 노드의 드롭다운 메뉴 를 클릭하고 원하는 Get 함수 를 선택합니다. 또한, 하나의 Get을 넘어 더 구체적인 프로퍼티를 찾을 수도 있습니다. 이 예시에서는 TryGetPawnOwner 에서 GetActorLocation 을 거쳐 특정 축 으로 Get 프로퍼티 경로를 생성합니다.

바인딩하고 나면 이 프로퍼티 액세스 노드를 사용하여 그래프에 프로퍼티 로직을 제공할 수 있습니다.

핀 사용
간단한 로직의 경우, 프로퍼티 핀에 프로퍼티 액세스를 직접 임베드할 수도 있습니다. 해당 노드 를 선택하고 디테일 패널에서 핀 프로퍼티를 찾아 해당 프로퍼티에 대한 드롭다운 메뉴 를 클릭합니다. 여기에서 비슷한 Get 함수 체인 을 선택하여 이 노드의 프로퍼티에 매핑할 수 있습니다.

프로퍼티 액세스 함수
더 복잡한 로직이 필요한 경우, 커스텀 함수를 생성하여 값을 출력할 수도 있습니다. 프로퍼티 값이 제대로 출력되려면 함수에 다음과 같은 작업을 수행해야 합니다.
- 함수에 최종 결과 프로퍼티가 ReturnValue 출력 핀에 연결된 Return Node 가 포함되어야 합니다.
- 함수의 디테일 패널에서 퓨어(Pure) 가 활성화되어 있어야 합니다.

함수를 생성하고 적절하게 설정한 다음에는 프로퍼티 액세스 메뉴에서 해당 함수를 추가할 수 있습니다.

프로퍼티 액세스 세팅
프로퍼티 액세스 메뉴에는 다음과 같은 선택 항목과 프로퍼티가 포함되어 있습니다.

이름 | 설명 |
---|---|
호출 사이트(Call Site) | 호출 사이트는 프로퍼티 액세스를 실행할 CPU 스레드를 제어합니다. 다음 옵션 중에서 선택할 수 있습니다.
|
함수(Functions) | 프로퍼티 액세스에 바인딩할 수 있는 함수 목록입니다. |
프로퍼티(Properties) | 애니메이션 블루프린트의 변수 목록으로, 프로퍼티 액세스를 변수에 바인딩할 수도 있습니다. |
CPU 스레드 사용량 및 퍼포먼스
복잡한 애님 그래프 로직을 생성할 때는 그래프 로직의 퍼포먼스와 비용을 고려해야 할 수도 있습니다. 기본적으로 애님 그래프는 '작업자 스레드'라고 하는, 이벤트 그래프와는 별도의 CPU 스레드에서 실행됩니다. '게임 스레드'는 애니메이션 블루프린트 및 모든 다른 블루프린트의 이벤트 그래프가 대신 실행되는 CPU 스레드입니다.
이런 비헤이비어 덕분에 애니메이션 작업을 다른 업데이트와 동시에 완료할 수 있어 멀티 코어 머신에서 게임 퍼포먼스가 크게 향상됩니다.
애님 그래프에서 안전하지 않은 작업이 수행되면 컴파일러도 경고를 표시합니다. 일반적으로 안전한 작업은 다음과 같습니다.
- 대부분의 애님 그래프 노드 사용
- 구조체의 멤버를 포함하여 애니메이션 블루프린트 멤버 변수에 직접 액세스
- 대부분의 산술 함수처럼 스테이트를 수정하지 않는 블루프린트 순수 함수 호출
권장하는 것은 아니지만, 이 행동을 비활성화하여 해당 애님 그래프가 게임 스레드에서 실행되도록 하려면 클래스 세팅(Class Settings) 디테일(Details) 패널에서 멀티 스레드 애니메이션 업데이트 사용(Use Multi Threaded Animation Update) 을 비활성화하면 됩니다.

애님 그래프 외에, 함수도 선택적으로 작업자 스레드에서 실행할 수 있습니다. 그러면 노드 함수와 함께 함수를 사용할 때 전체 애니메이션 블루프린트 그래프를 작업자 스레드에서만 실행되도록 오프로드하여 퍼포먼스를 더 향상할 수 있습니다.
권장하는 것은 아니지만, 이 행동을 비활성화하여 해당 함수가 게임 스레드에서 실행되도록 하려면 선택한 함수의 디테일 패널에서 스레드 세이프 를 비활성화하면 됩니다.

이벤트 그래프
모든 애니메이션 블루프린트에는 하나의 이벤트 그래프 가 있는데, 이는 특별한 애니메이션 블루프린트 관련 이벤트 컬렉션을 사용하여 노드의 시퀀스를 개시하는 표준 그래프입니다. 이벤트 그래프의 가장 일반적인 용도는 애님 그래프 노드에서 사용하는 값이나 프로퍼티를 업데이트하는 것입니다.
애니메이션 이벤트
이벤트 그래프는 엔트리 포인트 역할을 하는 하나 이상의 이벤트를 추가한 다음 함수, 플로우 컨트롤(Flow Control) 노드 및 변수를 연결하여 원하는 작업을 수행하는 방식으로 사용됩니다.
애님 그래프에서 제공하는 CPU 스레딩 및 노드 함수 기능을 사용할 때는 이벤트 그래프를 최대한 적게 사용하는 것이 좋습니다. 왜냐하면 이벤트 그래프가 프로젝트에 있는 대부분의 다른 블루프린트 로직과 함께 주 게임 스레드에서 실행되기 때문입니다. 따라서, 애니메이션 블루프린트에 복잡한 이벤트 그래프가 있으면 전반적인 퍼포먼스가 저하됩니다. 이러한 이벤트 대부분에는 스레드 세이프 대안이 있으므로, 가능하면 그 대안을 대신 사용해야 합니다.
이벤트 이름 | 노드 이미지 | 설명 |
---|---|---|
Begin Play | ![]() |
블루프린트 비주얼 스크립팅의 Event Begin Play 와 마찬가지로, 이 이벤트도 게임 또는 시뮬레이션 시작 시 실행되지만, 액터의 Begin Play 이벤트 전에 실행됩니다. 스레드 세이프 대안으로, 연관성이 있는 노드에 대해 초기 업데이트 시 노드 함수를 대신 사용할 수 있습니다. |
Initialize Animation | ![]() |
이 이벤트는 초기화 작업을 수행하기 위해 애니메이션 블루프린트 인스턴스가 생성될 때 한 번 실행됩니다. 애니메이션 블루프린트가 생성되자마자 액터의 컨스트럭션 스크립트(Construction Script) 및 Begin Play 실행 전에 실행됩니다. |
Linked Animation Layers Initialized | ![]() |
이 이벤트는 애니메이션 초기화 후에, 그리고 링크된 애니메이션 레이어가 초기화된 후에 한 번 실행됩니다. 스레드 세이프 대안으로, 연관성이 있는 링크된 애니메이션 레이어 노드에 대해 초기 업데이트 시 노드 함수를 대신 사용할 수 있습니다. |
Post Evaluate Animation | ![]() |
프레임마다 실행되지만, 애니메이션이 평가를 완료하고 현재 프레임에 대한 포즈를 적용한 후에 실행됩니다. 값을 리셋하거나 정확한 본의 트랜스폼을 가져오는 데 유용합니다. |
Update Animation | ![]() |
프레임마다 실행되어 애니메이션 블루프린트가 필요한 값에 대한 계산 및 업데이트를 수행할 수 있도록 합니다. 이 이벤트는 이벤트 그래프의 업데이트 루프로 들어가는 엔트리 포인트입니다. 마지막 업데이트 이후 경과된 시간은 Delta Time X 핀을 통해 제공되므로 시간에 따른 보간 또는 점증적 업데이트를 수행할 수 있습니다. 스레드 세이프 대안으로, [Blueprint Thread Safe Update Animation 함수] (#ThreadSafeUpdateAnimation)를 대신 사용할 수 있습니다. |
AnimNotify | ![]() |
스켈레톤 노티파이가 트리거되면 실행됩니다. |
Thread Safe Update Animation
애니메이션 블루프린트의 퍼포먼스를 개선하기 위해 Update Animation 이벤트 대신 Blueprint Thread Safe Update Animation 이라는 스레드 세이프 대안을 사용할 수 있습니다. 이 대안은 블루프린트에 추가하기 위해 오버라이드해야 하는 함수입니다. 이 함수가 유용한 이유는 Event Graph Update Animation 이벤트는 항상 게임 스레드에서 실행되므로 멀티스레딩을 활용한 전반적인 프레임 레이트 개선이 불가능하기 때문입니다.
오버라이드하려면 내 블루프린트(My Blueprint) 패널의 함수(Functions) 카테고리에서 오버라이드(Override) 드롭다운 메뉴를 클릭한 다음, Blueprint Thread Safe Update Animation 을 선택합니다.

이제 이 함수가 함수 목록에 포함되었습니다. 함수를 열면 함수 엔트리 포인트와 EventGraph Update Animation 노드의 Delta Time X 핀과 비슷한 Delta Time 핀이 표시됩니다. 이제 이 함수에서 이벤트 그래프의 로직과 같은 Update Animation 로직을 생성할 수 있으며, 이 함수는 게임 스레드가 아닌 작업자 스레드에서 실행됩니다.
