Jump애니메이션
ABP_Character / Locomotion에서 만들던 Jump를 완성해보자.
- Conduit(컨듀잇) : 여러 트랜지션 룰에서 공통적인 조건을 검사해줄 수 있다.
Idle → 컨듀잇 / Run → 컨듀잇으로 연결된 트랜지션 룰은 모두 true로 설정해서 컨듀잇까지는 바로 넘어간다.
이제 컨듀잇에서는 캐릭터가 떨어지고 있는 중인지 IsFalling 조건을 확인해주는 역할을 해준다.
만약 컨듀잇에서 IsFalling이 true라고 판별하게되면 JumpStart로 바로 넘어갈 수 있는 것이다.
컨듀잇이 애니메이션에 연결이 되어있다 하더라고 조건검사만 하는 역할일 뿐, 흐름이 그곳에 묶이는 건 아니다.
앞으로는 좀 더 알아보기 쉽게 컨듀잇의 이름을 IsFalling으로 바꿔준다.
JumpStart → JumpLoop
JumpStart → JumpLoop로 넘어가는 조건을 생각해보자.
JumpStart 애니메이션이 다 재생되면 바로 JumpLoop로 넘어가는 것이 자연스럽다.
여기선 Start 애니메이션이 거의 다 나왔을 때 즉, 90% 재생되었다면 Loop로 넘어가는 조건을 걸어줄 것이다.
JumpStart → JumpLoop 트랜지션 룰에 들어가서 조건을 만들어주자.
여기서 사용할 수 있는 노드는 두 가지가 있다.
- Current Time(ratio) : 현재 재생 시간
- Time Remaining(ratio) : 남은 재생 시간
※ ratio : 비율을 뜻하며 %를 생각하면 된다. 여기선 0.0 ~ 1.0 사이의 비율을 말한다.
만약 ratio를 안붙인다면 정확한 애니메이션 시간을 알고 있어야 한다.
말하자면 Start 애니메이션이 90%(0.9) 재생됬다면 Loop로 넘어간다는 뜻이다.
여기서 왜 100%를 안하냐고 할 수 있는데, 트랜지션 룰의 블렌드 세팅을 보면 경과시간 0.2초가 있어서
충분히 애니메이션이 다 나오며 자연스럽게 넘어간다고 할 수 있다. (블렌드 세팅은 밑에 후술함)
JumpLoop → JumpEnd
이제 JumpLoop → JumpEnd의 트랜지션 룰로 들어가보자.
JumpLoop → JumpEnd로 넘어가는 트랜지션 룰은 IsFalling이 false일 때라고 할 수도 있다.
IsFalling(컨듀잇)에서 TryGetPawnOwner - GetMovementComponent - IsFalling을 사용하여 조건을 판별했었는데,
여기서 문제는 이런 방식으로는 true일때만을 검사할 수 있고 false일때 검사는 따로 없다는 것이다.
따라서 TryGetPawnOwner - GetMovementComponent - IsMovingOnGround의 조건을 줄 것이다.
JumpEnd → Idle
JumpStart → JumpLoop → JumpEnd까지는 이제 조건에 맞게 애니메이션이 넘어갈테니, JumpEnd → Idle의
트랜지션 룰의 조건을 만들어주자.
여기의 조건은 JumpStart → JumpLoop 트랜지션 룰과 똑같이 설정해주면 된다.
이제 실행해보면 애니메이션이 넘어갈 때마다 뚝뚝 끊기는 것을 볼 수 있는데, 이는 애니메이션에 Loop Animation이
걸려있기 때문이라서 해제만 해주면 해결된다.
하지만 여기서 JumpLoop는 이름 그대로 Loop가 되어야 하기 때문에 JumpStart와 JumpEnd의 Loop Animation만
해제해주면 된다.
이번엔 계속 IsFalling에 경고가 발생하는 것을 해결해보자.
ABP_Character의 이벤트그래프에서 IsFalling의 값을 따로 받아올 것이다.
Possess될 Pawn에서 Movement Component를 뽑아와서 그 안에 있는 Is Falling의 값을 가져다 쓸 것이다.
Is Falling에서 나오는 값은 Return Value를 변수로 승격하여 자동으로 만들어진 변수(bFalling)에 계속 값을 저장한다.
이렇게 실시간으로 bFalling에 값이 갱신되고 있을텐데, 이제 bFalling변수를 이용해 경고를 없애보자.
먼저 Locomotion의 IsFalling(컨듀잇)에서 Get bFalling을 추가해 결과에 연결해준다.
다음으로 JumpLoop → JumpEnd 트랜지션 룰의 조건도 바꿔줄 것인데, Falling이 false일 때 넘어가면 되므로,
Get bFalling노드에 NOT을 연결하여 결과로 이어주면 된다.
JumpLoop와 Reverse
JumpLoop 애니메이션 블루프린트를 보면 계속해서 Loop되어 나오는 것을 볼 수 있는데,
Loop 치곤 좀 부자연스럽게 애니메이션이 나오는 것을 볼 수 있다.
때문에 JumpLoop 애니메이션을 한번 정재생했다가 역재생하는 것을 반복하는 방식으로 해결해보자.
첫번째 방법 - Loop와 Reverse 애니메이션 두개로 해결하기
Locomotion에서 JumpLoop 애니메이션을 복사하여 JumpLoopReverse을 하나 만든다.
다음으로 JumpLoop와 JumpLoopReverse 두개의 애니메이션을 서로 트랜지션 룰로 연결해준다.
다음으로 JumpLoopReverse 애니메이션 내부에서 Play Rate를 -1.0으로 수정해주면 거꾸로 역재생이 된다.
Start Position은 애니메이션의 역재생이 시작될 부분을 말하는데, 0.7로 수정하여 애니메이션 끝에서부터 되도록 한다.
다음으로 JumpLoop와 JumpLoopReverse의 트랜지션 룰들의 조건을 만들어줄 것이다.
이제 JumpLoop와 JumpLoopReverse에 각각 JumpEnd로 바로 갈 수 있게 트랜지션 룰을 연결해주어야 한다.
여기서 조건은 IsFalling이 false일 때의 조건으로 같을테니, 컨듀잇을 하나 추가해주어 JumpEnd로 넘어가도록 한다.
IsFalling(컨듀잇)을 추가했던 것과 비슷하다. 조건이 IsNotFalling으로 바뀌었을 뿐이다.
이후에 실행해보면 자연스럽게 애니메이션이 흘러가는 것을 볼 수 있을 것이다.
두번째 방법 - Loop와 Reverse 애니메이션을 하나로 합쳐서 만들기
먼저 Reverse 애니메이션을 만들어주기 위해서 기존의 JumpLoop 애니메이션 블루프린트로 들어갑니다.
그리고 애니메이션 재생 바를 제일 끝으로 옮겨준다. 좌측 하단의 루프 아이콘의 버튼을 눌러 루프를 해제해준다.
다음에 가운데 녹화버튼을 누르고 콘텐츠 폴더로 저장경로를 지정해주면 바로 녹화가 시작된다.
그리고 녹화버튼 왼쪽에 있는 반전버튼을 누르면 애니메이션이 한번 역재생하는 것을 볼 수 있다.
역재생이 완료됬다면 녹화버튼을 한번 더 눌러서 녹화 중지를 하면 콘텐츠 폴더에 방금 녹화한 애니메이션이 보일 것이다.
콘텐츠 폴더에 보면 생성된 애니메이션이 보이는데 ThirdPersonJump_Loop_Reverse으로 이름을 바꿔
콘텐츠 / Mannequin / Animations 폴더로 이동시켜서 정리해두자.
이제 ThirdPersonJump_Loop_Reverse 애니메이션의 블루프린트로 들어가서 재생하여 필요없는 프레임들을 정리한다.
애니메이션이 바로 시작되는 프레임 위치를 찾아 재생 바를 옮기고, 우클릭 - 프레임 0 ~ 프레임71까지 제거를 통해서
앞에 있는 필요없는 프레임들은 모두 제거해준다.
이후 뒤쪽의 필요없는 프레임 부분도 같은 방식으로 제거해줍니다.
이제 JumpLoop와 JumpLoopReverse 애니메이션 두개를 합쳐주기 위해서 콘텐츠 / Mannequin / Animations 폴더에서
우클릭 - 애니메이션 - 애니메이션 컴포짓을 추가해준다.
ThirdPersonJump_Loop_Composite 애니메이션 컴포짓 블루프린트로 들어오면 A포즈를 하고 있는 캐릭터가 보인다.
그 밑의 탭에 우리가 만든 JumpLoop와 Jump_Loop_Reverse 애니메이션을 차례로 넣어주면 자동으로 애니메이션이
이어져서 나오는 것을 볼 수 있다.
이제 ABP_Character에서 방금 만든 애니메이션 컴포짓(ThirdPersonJump_Loop_Composite)을 가져다 쓰면 된다.
먼저 Locomotion을 바꿔주기 전의 상태로 다시 바꿔준다.
JumpLoop와 JumpEnd를 연결하는 트랜지션 룰은 IsFalling - NOT - 결과의 조건으로 다시 바꿔준다.
이제 JumpLoop에 들어있는 애니메이션을 바꿔주기 위해 JumpLoop 내에서 세팅 - Sequence를 아까 만들었던
ThirdPersonJump_Loop_Composite 애니메이션 컴포짓으로 바꿔주기만 하면 끝이다.
이제 실행해보면 애니메이션이 잘 실행되는 것을 볼 수 있다.
애니메이션 프리뷰 에디터 사용하기
애님 프리뷰 에디터를 통해서 실행하기 전에 미리 프리뷰 화면으로 확인하는 방법을 알아보자.
이벤트그래프를 보면 실행하지 않았지만 계속해서 실행핀의 흐름이 흘러가고 있는 것을 볼 수 있다.
이는 프리뷰 화면에서 애니메이션을 미리 보여주기 위해 계속 실행되고 있기 때문이다.
이를 바꾸고자 Is Valid 노드를 중간에 넣어줄 것이다.
플레이 중이 아닐 때 Try Get Pawn Owner의 값은 none이다. 그래서 지금은 Is Not Valid로 결과값이 흘러가고 있다.
여기서 Is Valid는 실행이 됬는지를 판별해주는 역할로 실행이 되어야만 IsValid로 결과가 흘러간다.
이후에 실행해야만 실행핀이 IsValid로 흘러가는 것을 볼 수 있을 것이다.
이를 통해서 애님 프리뷰 에디터를 사용하여 실행 전에 프리뷰 화면으로 애니메이션을 미리 볼 수 있게 된다.
Character Movement의 디테일 내용들
- Use Separate Braking Friction : 이동하다 멈췄을 때 정지에 대해서 다단으로 나눠서 멈추는 기능
- Can Walk Off Ledges : 낭떨어지에 떨어질 수 있냐 없냐의 옵션
- Ignore Base Rotation : 지형이 움직일 때 위에 있는 캐릭터는 영향을 안받게 하고싶으면 체크
- Air Control : 수치에 따라서 점프 체공시간 동안 움직일 수 있는 힘을 말한다.(0.0이면 점프 체공시간동안 이동 안됨)
- Crouched Half Height : 앉아있을 때 절반 높이(Jump가 있듯이 Crouch도 있다)
- Nav Movement/Movement Capabilities : Crouch, Jump의 Can 유무를 체크할 수 있다.(Crouch할꺼면 체크)
블렌드(Blend)
트랜지션 룰을 클릭하여 디테일을 보면 블렌드 세팅이라는 것이 보인다.
완전히 하나인 애니메이션이 아닌 이상 전환 시에 뚝 끊기는 느낌이 들 수밖에 없다.
따라서 블렌드란 현재 애니메이션 뒷부분과 다음 애니메이션의 앞부분을 곂쳐서 자연스럽게 넘어가도록 해주는 것이다.
마치 선형보간과 같다고 할수도 있다.
블렌드 세팅의 모드를 보면 여러가지가 있다. 가장 기본값은 Hermite Cubic이고, Linear(선형보간)도 있다.
'언리얼엔진' 카테고리의 다른 글
13. 프리뷰 애셋 / 소켓 / 캐릭터에 무기 생성 / For Each Loop (0) | 2023.05.17 |
---|---|
12. 속력에 따른 Walk to Run / Weapon 만들기 (2) | 2023.05.16 |
10. PlayerController / Game Mode Base (2) | 2023.05.11 |
9. 캐릭터 좌우 이동 수정하기 (0) | 2023.05.10 |
8. 캐릭터 시점 이동하기 (0) | 2023.05.09 |