본문 바로가기
[ CODING STUDY ]/》언리얼엔진5 실습

언리얼엔진5 이동, 점프 애니메이션

by MRG 2023. 12. 14.
728x90
반응형

 

▣ 먼저 마켓플레이스에서 애니메이션이 포함되어 있는 무료캐릭터를 다운로드합니다. 

 

 

▣ 그리고 캐릭터블루프린트를 생성합니다. 

 

 

▣ 이름은 BP_Player로 지정하겠습니다.

 

 

▣ BP_Player 에디터로 들어와서 Mesh를 아까 다운로드한 캐릭터로 지정합니다. 

 

 

▣ 캐릭터에 위치와 방향 또한 캡슐 컴포넌트에 맞춰서 지정합니다.

그리고 스프링암과 카메라를 추가하여 원하는 위치에 배치합니다. 

 

 

▣ 다시 돌아와서 이번에는 Animation Blueprint를 생성합니다. 

 

 

▣ ABP_ 애니메이션 블루프린트에 약자를 넣고 이름을 지정합니다.

 

 

▣ ABP_Player로 들어오면 이렇게 에디터 구성이 되어 있습니다.

 

 

 

▣ 여기서 오른쪽마우스를 클릭하고 State를 검색합니다. 

State Machine를 생성합니다. 

 

 

▣ 그리고 이렇게 연결합니다. 

 

 

▣ New State Machine를 더블클릭합니다. 

여기서 애니메이션에 대한 상태를 조절합니다.

 

 

 

▣ 오른쪽 하단에 보면 Asset Browser이라는 메뉴에 여러 애니메이션이 있습니다.

이건 캐릭터 뼈대와 맞는 애니메이션을 모아둔 창입니다. 

여기서 Idle를 검색하고 Idle Combat를 가져옵니다. 그리고 이름을 Idle로 지정하겠습니다.

그리고 Entry에서 드래그하여 연결하고 컴파일 버튼을 클릭하면 애니메이션이 작동하는 걸 확인할 수 있습니다.

 

 

▣ 이번에는 이동 애니메이션을 모아서 만들어보겠습니다.

Blend Space라는 기능을 사용하겠습니다.

여러 애니메이션을 하나에 스페이스로 블렌딩 해주는 기능입니다.

 

https://docs.unrealengine.com/4.26/ko/AnimatingObjects/SkeletalMeshAnimation/Blendspaces/

 

블렌드 스페이스

Blend Space, 블렌드 스페이스는 여러 입력값에 따라 몇 개의 애니메이션도 서로 블렌딩할 수 있게 만들어 주는 애셋입니다.

docs.unrealengine.com

 

 

▣ 이름은 BS == Blend Space에 약자로 지정합니다.

 

 

▣ 블랜드스페이스 에디터에 들어오면 이런 창으로 구성되어 있습니다. 

 

 

 

먼저 Horizontal AxisVertical Axis에 값을 조절합니다.

이 두 가지는 입력 Axis처럼 값 변수로 애니메이션을 다루기 위한 Axis입니다.

이름을 변경하면 가운데 하단에 Speed, Angle이라고 이름이 변경됩니다.

 

 

Asset Browser에서 Idle을 검색한 다음 Speed, Angle 값 위치에 맞게 배치합니다.

값에 따라서 애니메이션이 작동하기 때문에 정확하게 배치합니다.

Idle에 위치는 0, 0입니다.

 

 

▣ Walk를 검색해서 Speed 50이고 Angle 위치에 맞게 배치합니다. 

만약 값에 맞게 배치가 어려운 경우 배치한 다음에 사각형을 누르고 Angle Speed를 직접 값을 입력해서 배치합니다.

해당 애니메이션을 클릭해서 값을 변경할 수도 있고 Ctrl키를 누르고 있는 상태에서 마우스를 이동하면 값에 따라 애니메이션이 바뀌는 것도 가능합니다.

중간중간 세이브랑 컴파일을 꼭 합니다.

 

 

▣ Jog애니메이션은 뛰는 애니메이션입니다. 이것 또한 Angle, Speed 값에 맞게 배치해 주세요.

완료되었다면 컴파일과 세이브를 진행합니다.

 

 

▣ 다시 ABP_Player에 New State Machine로 돌아가서 아까 완성한 BS_Player를 드래그합니다. 

 

 

▣ 이름을 WalkRun으로 변경하고 더블클릭하면 이렇게 아까 만들었던 Angle, Speed값이 나오는 걸 확인할 수 있습니다. 

 

 

▣ Angle, Speed 입력핀을 끌어서 Promote to variable을 클릭하고

 

 

▣ 변수를 각각 생성합니다. 

 

 

▣ 그리고 상단에 New State Machine를 클릭해서 다시 돌아와서 Idle과 WalkRun을 연결합니다.

그럼 동그란 원이 생성되는데 이걸 더블클릭합니다.

 

 

▣ 그럼 이렇게 애니메이션이 실행될 조건에 대한 부분이 나오는데 여기서 Speed노드를 Get 하고 0보다 크면 작동하게 하는 노드를 연결합니다. 

 

 

▣ New State Machine로 돌아가서 반대로도 화살표를 연결하고 이번에는 Not Bool을 연결해서 조건이 다른 경우 다시 Idle로 돌아가는 조건을 완성합니다. 

 

 

▣ 그런 다음에 Event Graph로 들어와서 노드를 완성합니다. 

 

https://docs.unrealengine.com/4.27/ko/AnimatingObjects/SkeletalMeshAnimation/NodeReference/Events/

 

애니메이션 이벤트

이벤트란 애니메이션 블루프린트 초기화 및 업데이트를 위해 애니메이션 시스템이 호출하는 것을 말합니다.

docs.unrealengine.com

 

▣ Event Blueprint Update Animation은 애니메이션을 업데이트하면 발생하는 이벤트노드입니다.

 

https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/Animation/TryGetPawnOwner/

 

Try Get Pawn Owner

Try Get Pawn Owner

docs.unrealengine.com

 

Try Get Pawn Owner은 애니메이션 폰에 대한 참조 노드입니다.

 

 

https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/Utilities/Transformation/GetVelocity/

 

Get Velocity

Get Velocity

docs.unrealengine.com

 

▣ Get Velocity는 Target에 속력을 구해주는 노드입니다.

 

https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Math/Vector/VectorLength/

 

Vector Length

Vector Length

docs.unrealengine.com

 

▣ Vector Length는 벡터의 길이는 구해주는 노드입니다.

 

▣ 정리하면 현재 플레이어의 속력과 벡터의 길이는 구해서 Speed 변수에 세팅합니다.

그럼 이동을 할 때마다 애니메이션이 작동하는 원리입니다.

 

 

▣ 회전에 대한 부분도 추가해 보겠습니다. 

 

https://docs.unrealengine.com/5.0/en-US/BlueprintAPI/Transformation/GetActorRotation/

 

Get Actor Rotation

Get Actor Rotation

docs.unrealengine.com

 

▣ Get Actor Rotaion은 액터의 RootComponent 회전값을 반환합니다.

 

https://docs.unrealengine.com/4.26/en-US/BlueprintAPI/Animation/CalculateDirection/

 

Calculate Direction

Calculate Direction

docs.unrealengine.com

 

▣ Calulate Direction는 속도와 순방향 회전 벡터 사이의 각도를 반환합니다. 반환 범위는 [-180, 180]이며 블렌드스페이스 방향 값을 공급하는 데 사용할 수 있습니다.

 

▣ 이렇게 회전값을 구해서 Angle 변수에 대입하게 되면 회전에 따라 애니메이션이 작동합니다. 

컴파일 저장 후 

 

 

▣ 플레이를 해보면 이동할 때마다 애니메이션이 나오게 되고 이동 방향에 따라 애니메이션이 다르게 작동합니다. 

혹시 방향에 따른 애니메이션이 안될 경우 꼭 블랜드스페이스에 애니메이션이 Speed, Angle에 정확하게 위치하는지 확인해 주세요.

 

 

▣ 이번에는 점프애니메이션을 구현하겠습니다.

ABP_Player에 New State Machine로 돌아와서 Jump에 관한 애니메이션을 추가합니다. 

 

 

Idle에서 Jump로 넘어가는 상태에 대한 IsJump를 만들어서 넣어주겠습니다.

 

 

Jump_End는 점프를 하고 있는 상태에서 작동하는 애니메이션이기 때문에

Jump라고 노드를 검색하면 Jump_Start_Combat라는 Jump에 애니메이션에 Time Remaining 라는 노드가 있습니다. 이 함수는 애니메이션 시간을 의미하며 점프애니메이션시간이 0.1초 보다 크면 남아 있다면 작동하게 합니다.

 

 

 

 

 

Jump가 끝나면 그리고 달리는 중에 점프를 하게 하는 상태에 대한 노드까지 완성합니다.

그리고 Event Graph로 돌아가서

 

 

 

https://docs.unrealengine.com/5.2/en-US/BlueprintAPI/AI/Components/NavMovement/IsFalling/

 

Is Falling

Is Falling

docs.unrealengine.com

 

▣ Is Falling함수 노드를 연결해서 IsJump 넣습니다.

Is Falling함수 노드는 현재 떨어지고 있으면 true를 반환합니다(비행하지 않고, 유체가 아닌 볼륨에서, 땅에 있지 않음).

다시 말해 공중에 있는지 없는지에 대한 여부에 따라 점프 애니메이션이 작동하게 하는 원리입니다.

이 상태를 IsJump변수에 세팅합니다.

 

 

▣ 점프에 대한 Action Mapping을 만들기 위해 Project Settings에 Input에서 Jump라는 Action Mappings을 생성합니다. 

 

 

▣ 그리고 BP_Player로 가서 점프에 관한 코드를 노드를 완성합니다. 

Pressed는 키를 누를 때

Released는 키를 누르고 때면 작동하는 이벤트입니다.

 

▣ Jump, Stop Jumping 함수 노드는 Character Movement에서 기본적으로 제공하는 함수입니다. 

 

▣ Play Sound 2D는 소리를 재생하는 노드로 점프를 어떤 상황에서도 하게 되면 소리가 나오게 합니다. 

 

 

▣ 소리에 대한 부분은 애니메이션에서도 추가 가능합니다. 

Jump_Start_Combat를 더블클릭해서 들어와서 Track을 클릭하고 AddNotify Track을 추가합니다.

이름을 변경하고 해당 트릭옆에 프레임에 오른쪽마우스를 클릭하고 Add Notify를 클릭하면 여러 기능들을 추가할 수 있습니다. Play Sound를 추가하고 추가한 트릭을 클릭한 다음에 Sound를 선택해 주시면 됩니다. 

728x90
반응형

댓글