Unreal

15. Animation BP

Kelvin의 게임개발 2024. 1. 23. 00:01
728x90
반응형

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되어 자연스럽게 전환된다

 

 

 

 

728x90
반응형

'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