관련 문서: animating-characters-and-objects\SkeletalMeshAnimation\AnimBlueprints\AnimGraph#cpu스레드사용량및퍼포먼스 course: version: 5.0
언리얼 엔진 에서 캐릭터를 위한 애니메이션 블루프린트(Animation Blueprint)를 개발할 때, 다이내믹 무브먼트와 로코모션 변수 를 구현하면 애니메이션 동작 제어에 도움이 될 수 있습니다.
이 문서에서는 EventGraph 애니메이션 블루프린트 로직을 설정하여 자체 프로젝트에서 이러한 변수를 계산하는 방법에 대해 설명합니다. 또한, 이 문서에서는 property access 노드를 사용하여 스레드 세이프 블루프린트 함수에서 이러한 변수를 계산해 프로젝트 퍼포먼스와 안정성을 높이는 방법에 대해서도 설명합니다.
전제조건
- 무브먼트 컴포넌트가 있는 제어 가능한 3인칭 캐릭터.
필요하다면 3인칭 템플릿 프로젝트로 이러한 전제조건을 보완할 수 있습니다.
캐릭터 오브젝트 레퍼런스
대부분의 애니메이션 변수는 EventGraph에서 캐릭터의 무브먼트 컴포넌트를 사용하여 계산할 수 있습니다. 캐릭터의 무브먼트 컴포넌트를 사용하여 다른 애니메이션 변수를 계산하려면, 레퍼런스 변수를 생성해야 합니다.
먼저, 캐릭터 애니메이션 블루프린트의 EventGraph 에서 Event Blueprint Initialization Animation 노드를 생성합니다.

Event Initialization 노드로부터 애니메이션 블루프린트를 캐릭터의 블루프린트에 캐스팅하는 Cast 노드를 생성합니다.
워크플로 예시에서 캐릭터의 블루프린트는 3인칭 템플릿 프로젝트에 있는 BP_ThirdPersonCharacter
입니다.
그런 다음, Get Owning Actor 노드를 생성하고 Return Value 출력 핀을 Cast 노드의 Object 입력 핀에 연결합니다.

다음으로, 캐스트 노드의 As Character 출력 핀을 우클릭 한 다음, 컨텍스트 메뉴에서 변수로 승격(Promote to Variable) 옵션을 선택하여 캐릭터 오브젝트 레퍼런스 변수를 생성합니다.
로직을 연결한 다음에는, 블루프린트의 EventGraph 및 AnimGraph 에서 캐릭터 오브젝트 레퍼런스 변수에 액세스할 수 있습니다.

무브먼트 컴포넌트 레퍼런스
캐릭터 오브젝트(Character Object) 에서 캐릭터의 무브먼트 컴포넌트(Movement Component) 를 분리하려면, Get Character Movement 노드가 필요합니다. Set Character 변수 노드의 Character 출력 핀으로부터 Get Character Movement 노드를 생성합니다.

다음으로, Character Movement 출력 핀을 우클릭 하고 컨텍스트 메뉴에서 변수로 승격을 선택하여 무브먼트 컴포넌트 레퍼런스 변수를 생성합니다.

로직을 연결한 다음에는, 블루프린트의 EventGraph 및 AnimGraph 에서 캐릭터 무브먼트 컴포넌트 레퍼런스 변수에 액세스할 수 있습니다.

속도
캐릭터의 속도는 방향이나 속력이 필요한 애니메이션 계산에 유용한 값으로 사용할 수 있습니다.
EventGraph 에서 속도 변수를 생성하려면, 먼저 Event Blueprint Update Animation 노드를 생성합니다.
다음으로 무브먼트 컴포넌트 레퍼런스 변수를 EventGraph 에 추가합니다. 그런 다음, Get Velocity 노드를 사용하여 무브먼트 컴포넌트의 방향과 무브먼트 크기를 나타내는 벡터 값을 계산할 수 있습니다.

다음으로, Get Velocity 노드의 Velocity 출력을 우클릭 하고 컨텍스트 메뉴에서 변수로 승격 을 선택하여 속도 변수를 생성합니다.
로직을 연결한 다음에는, 블루프린트의 EventGraph 및 AnimGraph 에서 속도 변수에 액세스할 수 있습니다.

여기서 Print String 노드는 프레임마다 업데이트된 캐릭터 속도의 X, Y, Z 값이 있는 디버그 메시지를 전송합니다.

스레드 세이프
먼저, 캐릭터의 애니메이션 블루프린트에서 새 스레드 세이프 함수를 생성합니다.
그런 다음, 그래프에서 우클릭 하여 Property Access 노드를 생성합니다.
Property Access 노드의 드롭다운 메뉴에서 Try Get Pawn Owner > Get Movement Component > Velocity 함수를 선택합니다. 그런 다음, 벡터 출력 핀을 우클릭하고 변수로 승격을 선택하여 속도 변수를 생성합니다.

로직을 연결한 다음에는, 블루프린트의 EventGraph 및 AnimGraph 에서 속도 변수에 액세스할 수 있습니다.

프로젝트 런타임 중에 이 함수를 업데이트하려면, Blueprint Thread Safe Update Animation 그래프에 스레드 세이프 Velocity 함수를 추가합니다.

캐릭터의 애니메이션 블루프린트가 이제 스레드 세이프 방식으로 캐릭터의 속도를 계산합니다.
캐릭터 속력
캐릭터 이동 속력은 달리기나 걷기 스테이트와 같은 캐릭터의 속력을 기반으로 애니메이션을 선택할 때 유용한 변수로 사용할 수 있습니다.
속도 변수로부터 Vector Length XY 노드를 생성하여 무브먼트 컴포넌트 속도에서 캐릭터 속력을 분리할 수 있습니다.
다음으로, Vector Length XY 노드의 Return Value 출력 핀을 우클릭 하고 컨텍스트 메뉴에서 변수로 승격 을 선택합니다.

로직을 연결한 다음에는, 블루프린트의 EventGraph 및 AnimGraph 에서 속력(Speed) 변수에 액세스할 수 있습니다.
여기서 Print String 노드는 프레임마다 업데이트된 캐릭터 속력 값이 있는 디버그 메시지를 전송합니다.

스레드 세이프
먼저, 캐릭터의 애니메이션 블루프린트에서 새 스레드 세이프 함수를 생성합니다.
다음으로, Property Access 노드를 생성하고 드롭다운 메뉴에서 Try Get Pawn Owner > Get Movement Component > Velocity 함수를 선택합니다.
Property Access 노드의 출력에서 Vector Length XY 노드를 생성하여 전방 및 측면 모션(X 및 Y 축)을 추출합니다.

프로젝트 런타임 중에 이 함수를 업데이트하려면, Blueprint Thread Safe Update Animation 그래프에 스레드 세이프 Speed 함수를 추가합니다.

캐릭터의 애니메이션 블루프린트가 이제 스레드 세이프 방식으로 캐릭터의 속도를 계산합니다.
이동 한계치
캐릭터 이동이 애니메이션 재생을 트리거하는 시점을 제어하려면, 캐릭터 속력이 설정된 크기에 도달할 때 이동할 수 있게 해주는 이동 한계치(Movement Threshold) 변수를 생성해야 합니다.
EventGraph의 캐릭터 속력 변수로부터 Greater Than or Equal To (>=) 노드를 생성하고 값을 낮은 숫자로 설정합니다.
이 숫자는 0.1
같은 매우 작은 값이 될 수 있습니다.
Greater Than or Equal To (>=) 노드의 부울 출력 핀을 우클릭 하고 컨텍스트 메뉴에서 변수로 승격 을 선택합니다.

로직을 연결한 다음에는, 애니메이션 블루프린트의 EventGraph 및 AnimGraph 에서 이동 한계치 변수에 액세스할 수 있습니다.
여기서 Print String 노드는 프레임마다 업데이트된 캐릭터 이동 한계치 변수 스테이트가 있는 디버그 메시지를 전송합니다.

스레드 세이프
먼저, 캐릭터의 애니메이션 블루프린트에서 새 스레드 세이프 함수를 생성합니다.
스레드 세이프 그래프에서 Property Access 노드를 생성하고 노드를 Try Get Pawn Owner > Get Movement Component > Velocity 로 설정합니다. Vector Length XY 함수 노드로 전방 및 측면 이동을 추출합니다.
그런 다음, Greater Than or Equal To (>=) 노드를 사용하여 이동 애니메이션이 발생하지 않아야 하는 속력 한계치를 설정합니다
이 숫자는 0.1
같은 매우 작은 값이 될 수 있습니다.
Greater Than or Equal To (>=) 노드의 부울 출력 핀을 우클릭 하고 컨텍스트 메뉴에서 변수로 승격 을 선택합니다.

프로젝트 런타임 중에 이 함수를 업데이트하려면, Blueprint Thread Safe Update Animation 그래프에 스레드 세이프 Should Move 함수를 추가합니다.

캐릭터의 애니메이션 블루프린트가 이제 스레드 세이프 함수에서 캐릭터의 이동 한계치 변수를 계산합니다.
점프 및 낙하
점프 및 낙하(Jumping and Falling) 변수를 사용하여 캐릭터의 AnimGraph 에서 점프와 착지 애니메이션을 재생할 시점을 결정할 수 있습니다.
먼저, 애니메이션 블루프린트의 EventGraph 에 무브먼트 컴포넌트 변수를 생성합니다.
이제 무브먼트 컴포넌트 레퍼런스를 추가합니다 변수 노드로부터 IsFalling 함수 노드를 생성할 수 있습니다.
Is Falling 노드의 Return Value 출력 핀을 우클릭 하고 컨텍스트 메뉴에서 변수로 승격 옵션을 선택합니다.

로직을 연결한 다음에는, 애니메이션 블루프린트의 EventGraph 및 AnimGraph 에서 점프 및 낙하 변수에 액세스할 수 있습니다.
여기서 Print String 노드는 프레임마다 업데이트된 캐릭터 점프 및 낙하 변수 스테이트가 있는 디버그 메시지를 전송합니다.

스레드 세이프
먼저, 캐릭터의 애니메이션 블루프린트에서 새 스레드 세이프 함수를 생성합니다.
Property Access 노드를 생성하고 노드를 Try Get Pawn Owner > Get Movement Component > IsFalling 으로 설정합니다.
Property Access 노드의 출력 핀을 우클릭 하고 컨텍스트 메뉴에서 변수로 승격 옵션을 선택합니다.

프로젝트 런타임 중에 이 함수를 업데이트하려면, Blueprint Thread Safe Update Animation 그래프에 스레드 세이프 Is Falling 함수를 추가합니다.

캐릭터의 애니메이션 블루프린트가 이제 스레드 세이프 함수에서 캐릭터의 점프 및 낙하 스테이트 변수를 계산합니다.
EventGraph 레퍼런스
여기서 예시 워크플로에서 사용한 EventGraph 의 전체 Event Blueprint Update Animation 로직을 참조할 수 있습니다.
