1. Animation BP
다양한 애니메이션을 적용하기 위해서는 AnimBP를 사용해야 한다 (AnimBP는 UAnimInstance를 부모클래스로 한다)
AnimBP를 생성할 때는 우선 Skeleton을 지정해야 한다
AnimBP를 생성하고 열어보면 좌측에 Viewport가 있고 EventGraph, AnimGraph가 있는걸 확인할 수 있다
EventGraph는 다른 BP의 EventGraph와 마찬가지로 계산 및 논리 흐름 구성을 하는곳이고 (마찬가지로 변수, 함수도 생성이 가능하다) AnimGraph는 Pose를 관리하는 곳이다
AnimGraph의 Output Pose에 원하는 Pose를 넣어 Character에 적용할 수 있다
AssetBrowser에서 원하는 Animation Sequence Asset을 Drag Drop으로 배치하여 Sequence Player Node로 만들고 Output Pose의 Result에 연결시켜 원하는 Animation을 출력할 수 있다
SequencePlayer Node의 Detail에서 다양한 Animation 조절이 가능하다 ex) Looping, Play Rate
만든 AnimBP는 Character의 SkeletalMesh에서 적용해야한다
Animation Mode를 AnimBP로 변경하고 만든 AnimBP Class를 지정해준다
그 결과 Animation이 적용된 Character의 모습을 확인할 수 있다
하지만 가만히 있을때도 달리는 애니메이션이 출력되는데 이러한 현상을 방지하기 위해 데이터를 기반으로 한 StateMachine을 만들어야 한다
우선 Character의 정보를 가져오기 위해 Character BP Class 변수를 만들어준다
이때 Object / Class Reference는 객체 및 클래스를 바로 Load하여 실체가 존재하지만 Soft Reference는 실제로 필요할 때 Load를 해서 사용해야 한다 (추후에 나올 SoftObjectPtr->LoadSynchronous()하는 방식이다)
SoftReference는 해당 Object ,Class의 경로를 가리키고 있다
AnimBP는 해당 AnimBP Class를 소유하고 있는 Pawn을 가져올 수 있다, 이 의미는 해당 AnimBP를 가지고 있는 Skeletal Mesh Component를 가진 Pawn을 Get할 수 있다는 의미이다
Try Get Pawn Owner : 해당 AnimBP Class를 소유하고 있는 Pawn을 APawn으로 반환한다
이 두 Node는 BP의 Begin Play, Tick과 같은 Event Node이다
Cast : C++의 Cast<>()와 같다 원하는 Type으로 Casting해준다
ACharacter의 CharacterMovementComponent는 움직임에 대한 모든 정보를 가지고 있다 ex) 공중에 있는지, 속도, 중력 등등
Get Movement Component : APawn의 MovementComponent를 UPawnMovementComponent*로 반환한다
MovementComponent의 Velocity로 속도를 Get할 수 있다 (FVector의 길이로 판단)
Vector Length : Vector의 길이를 float으로 반환한다
Vector Length XY도 존재한다 (Z축 제외한 길이를 반환)
Data에 기반하여 원하는 Animation을 적용하려면 StateMachine이 필요하다
이 StateMachine의 Output으로 나오는 Pose를 OutputPose의 Result에 연결하여 최종 Pose를 적용하는 방식이다
StateMachine은 말 그대로 다양한 State를 왔다갔다 할 수 있게 해주는 노드이다
Add State로 원하는 State를 추가할 수 있다
이렇게 여러 State를 추가하고 Flow를 직접 제어할 수 있다 (드래그로 화살표 추가 가능)
State를 더블클릭하고 내부에서 해당 State에 맞는 Output Animation Pose를 넣어주면 된다
(Idle State)
State와 State를 넘어다니기 위해서 조건이 필요하다
해당 화살표를 더블클릭 하여 조건을 추가할 수 있다
예를 들면 다음과 같이 조건을 걸 수 있다 (GroundSpeed가 0보다 크면 연결되어 있는 State로 들어갈 수 있다)
Result의 Can Enter Transition이 True로 반환되게 되면 연결되어 있는 State로 들어가게 된다
이 조건들을 이용하여 Idle <-> Run <-> Jump 등 다양한 State를 이용하여 애니메이션 전환이 가능하다
기본적으로 State간의 Animation들은 Blend되어 자연스럽게 전환된다
'Unreal' 카테고리의 다른 글
17. Jump Animation (125) | 2024.01.24 |
---|---|
16. Anim Instance (93) | 2024.01.23 |
14. The Character Class & Hair And Eyebrows (214) | 2024.01.13 |
13. RotationMatrix (173) | 2024.01.12 |
12. The Character Class (95) | 2024.01.12 |