ABP_Mannequin_Base
이 AnimBP의 Event Graph에 어떠한 로직도 없습니다.
로직은 게임 쓰레드에서 프로세싱 됩니다. 매틱마다, 각각의 AnimBP를 위한 Event Graph는 순차적으로 하나씩 실행되어져야 합니다. 이러한 것은 퍼포먼스 병목이 될 수 있습니다.
이 프로젝트를 위해서, 우리는 새로운 BlueprintThreadsafeUpdateAnimation 함수를 대신에 사용했습니다. BlueprintThreadsafeUpdateAnimation에서 로직은 여러 AnimBP를 동시에, Game Thread의 오버헤드 없이 병렬로 실행 할 수 있습니다.
ABP_Mannequin_Base::BlueprintThreadSafeUpdateAnimation
이 함수는 게임 데이터를 모으고 이 데이터로 애니메이션을 선택하고 처리하는 유용한 정보로 처리하는 역할을 합니다.
Threadsafe 함수의 주의 사항은 이벤트 그래프에서와 같이 게임 개체의 데이터에 직접 액세스할 수 없다는 것입니다.
이는 다른 스레드가 동시에 실행 중일 수 있고 해당 데이터를 변경할 수 있기 때문입니다.
대신에 Property Access 시스템을 사용하여 데이터에 액세스합니다. Property Access 시스템은 데이터가 안전할 때 자동으로 데이터를 복사합니다.
다음은 Pawn 소유자의 위치에 액세스하는 예입니다(컨텍스트 메뉴에서 "Property Access" 검색).
ABP_Mannequin_Base > Anim Graph
이 Anim Graph는 애니메이션을 직접 참조하지 않습니다. 대신 그래프의 특정 지점에서 포즈를 재생하기 위해 몽타주 및 연결된 애니메이션 레이어에 대한 진입점을 제공합니다.
이 그래프의 주요 목적은 진입점을 함께 블렌드하는 것입니다(예: 상체 포즈와 하체 포즈 혼합).
이 접근 방식을 사용하면 필요할 때만 애니메이션을 로드할 수 있습니다. 예를 들어, 무기는 필요한 몽타주 및 연결된 애니메이션 레이어에 대한 참조를 보유하므로 데이터는 무기가 로드될 때만 로드됩니다.
예를 들어 B_WeaponInstance_Shotgun은 몽타주 및 연결된 애니메이션 레이어에 대한 참조를 보유합니다. 해당 데이터는 B_WeaponInstance_Shotgun이 로드될 때만 로드됩니다.
B_WeaponInstance_Base는 무기의 애니메이션 레이어를 연결하는 역할을 합니다.
ABP_Mannequin_Base > Anim Graph > LocomotionSM
이 State Machine은 높은 수준의 캐릭터 State들 간의 전환을 처리합니다.
각 State의 동작은 대부분 ABP_ItemAnimLayersBase의 레이어에서 처리됩니다.
ABP_ItemAnimLayersBase > Event Graph
AnimBP_Mannequin_Base와 마찬가지로 이 AnimBP는 BlueprintThreadSafeUpdateAnimation에서 로직을 수행합니다.
또한 이 AnimBP는 Property Access 및 GetMainAnimBPThreadSafe 함수를 사용하여 AnimBP_Mannequin_Base의 데이터에 액세스할 수 있습니다. 예는 아래에 있습니다.
이 AnimBP는 소총 및 권총과 같은 일반적인 무기 유형에 대한 논리를 처리하도록 작성되었습니다.
커스텀 로직이 필요한 경우(예: 활과 같은 무기의 경우) ALI_ItemAnimLayers 인터페이스를 구현하는 다른 AnimBP를 작성할 수 있습니다.
애니메이션 애셋을 직접 참조하는 대신, 이 AnimBP에는 하위 애니메이션 블루프린트로 재정의할 수 있는 변수 세트가 있습니다.
이 변수는 My Blueprint 탭의 "Anim Set - X" 카테고리에서 찾을 수 있습니다.
이를 통해 하나의 AnimBP에서 각 무기에 대한 애니메이션 콘텐츠를 참조(로드)하지 않고도 여러 무기에 대해 동일한 로직을 재사용할 수 있습니다.
각 "Anim Set" 변수에 대한 값을 제공하는 자식 애니메이션 블루프린트의 예로 ABP_RifleAnimLayers를 참고하세요.
ABP_ItemAnimLayersBase > FullBody_IdleState
이 AnimBP는 AnimBP_Mannequin_Base의 각 상태에 대한 레이어를 구현합니다.
레이어는 단일 애니메이션을 재생하거나 State Machine과 같은 복잡한 로직을 포함할 수 있습니다.
ABP_ItemAnimLayersBase > FullBody_StartState
이것은 애님 노드 함수의 사용 사례입니다.
애님 노드 함수는 애니메이션 노드에서 실행할 수 있습니다. 노드가 활성 상태일 때만 실행되므로 로직을 특정 노드 또는 상태로 로컬라이즈 로직을 허용합니다.
이 경우 애님 노드 함수는 노드가 관련이 있을 때 재생할 애니메이션을 선택합니다. 또 다른 Anim Node Function은 애니메이션의 재생 속도를 관리합니다.
ABP_ItemAnimLayersBase > Update Start Anim
이것은 Distance Matching을 사용하여 시작 애니메이션이 이동한 거리가 폰 소유자가 이동한 거리와 일치하도록 하는 예입니다.
이렇게 하면 애니메이션과 모션 모델을 동기화하여 발이 미끄러지는 것을 방지할 수 있습니다.
이것은 시작 애니메이션의 재생 속도를 효과적으로 제어합니다. 애니메이션이 너무 느리거나 너무 빠르게 재생되지 않도록 유효 재생 속도를 고정합니다.
유효 재생 속도가 고정되어 있으면 여전히 약간의 미끄러짐이 나타납니다.
이 문제를 해결하기 위해 나중에 Stride Warping을 사용하여 나머지 차이를 수정하기 위해 포즈를 조정합니다.
Distance Matching 함수를 사용하려면 애니메이션 Animation Locomotion Library plugin이 필요합니다.
'게임 개발 > Unreal Engine' 카테고리의 다른 글
[UE4] 커스텀 구조체 TArray Contains 동작을 위한 oprator== 구현 (0) | 2022.06.11 |
---|---|
[UE4] AActor 에디터에서 선택 Event 구현 (0) | 2022.06.09 |
[UE5] TObjectPtr<T> 소개 (0) | 2022.05.10 |
[UE5] Quixel Bridge가 보이지 않는 현상 수정 (0) | 2022.05.02 |
[UE4] DataTable->FindRow의 ContextString 의미? (0) | 2022.04.22 |