저번에 현재 무기를 장착 중에 다른 무기로 교체하는 것을 해봤었다.
그 중에 현재 장착한 무기와 교체할 무기가 다른 경우일 때가 문제였었는데, Set WeaponNow에서 다시 실행이 앞으로
흘러와 몽타주 재생으로 연결되었었다.
그리고 그 당시 무기는 교체됬지만 같은 애니메이션이 반복해서 나오는 문제가 발생했었다.
이를 해결하기 위해서 Set WeaponNow에서 Is Armed함수로 실행핀을 옮김으로써 현재 무기를 해제 후, 교체할 무기의 애니메이션이 자연스럽게 나오도록 수정해주었다.
이동 시 무기 교체 애니메이션 해결하기
1. 이동 중에 무기 교체 or 무기 교체 중에 이동 금지
2. 이동하면서 무기 교체 가능
여기선 2번째 방법 이동하면서 무기 교체가 가능하도록 할 것이다.
무기 교체 애니메이션 따로 이동 애니메이션 따로이기 때문에 매우 부자연스럽게 애니메이션이 나오는 것을 해결해보자.
이는 애니메이션 블루프린트(ABP_Character)해서 해결할 수 있다.
AnimGraph를 보면 저번에 추가한 DefaultSlot으로 몽타주 재생을 해결했었다.
몽타주 재생이 없을 때는 Locomotion의 애니메이션이 그대로 출력됬지만, 몽타주 재생 발생 시 Locomotion에 몽타주 애니메이션을 오버라이드하여 바꿔주는 역할이었다.
Layered blend per bone(본마다 레이어로 블렌딩합니다.)
이 노드는 해당 스켈레톤에서 특정 본을 지정하여 그 본 아래로는 블렌드 포즈가 적용될 수 있도록 해주는 역할이다.
(스켈레톤의 본이 트리구조라서 가능한 것)
- Base Pose : 기본으로 재생될 포즈
- Blend Posses : Base Pose에 블렌딩할 포즈(얼마나 블렌딩할지 설정 가능)
- Blend Weights : Blend Posses의 혼합비율. 어느쪽에 더 무게를 둘지 비중(BlendDepth에서 최대치로 적용될 비율)
※ 블렌딩 비율 : BlendWeight * BlendDepth
해당 노드 디테일에서 보면 Branch Fliters 배열이 보일 것이다.
- Bone Name : Blend Posses 0이 어느 Bone부터 적용이 될 것인지를 설정해주는 것이다.(spine_01)
- Blend Depth(블렌드 깊이?) : 해당되는 본에 두 개의 애니메이션이 혼합되는 비율이라고 생각하면 된다.
BlendDepth에 입력되는 인티저 값은 분모라고 생각하면 된다.
ex) 1 = 1/1, 2 = 1/2, 5 = 1/5, 10 = 1/10
1의 값이라면 지정한 본(spine_01)부터 Blend Posses를 100% 적용한다는 뜻
4의 값이라면 지정한 본(spine_01)부터 Blend Posses를 25% 적용한다는 뜻
지정한 본(spine_01) 다음의 본(spine_02)... 로 넘어갈 수록 BlendDepth에서 입력한 분모의 값이 -1씩 감소되어 적용되는 Blend Posses의 비율이 커진다.
BlendDepth에 양수 뿐만 아니라 0과 음수 또한 입력이 가능하다. 0과 음수는 예외로 생각하면 된다.
0은 사실상 1과 동일하게 처리한다.
음수는 해당하는 본 아래로는 Blend Posses를 적용하지 않겠다는 것이다.
Cached Poses(캐시 포즈 새로 저장)
BasePose로 사용할 Locomotion을 연결해주면 한 곳에만 연결이 되는 것을 볼 수 있다.
하지만 Locomotion에서 나오는 포즈를 여러 곳에 사용해야만 하는 상황이다.
이를 해결해주기 위해 캐시 포즈 새로 저장을 사용하게된다.
Locomotion 포즈를 캐싱하여 따로 임시 저장해두는 것이다.
이후 CachedLocomotion 캐시 포즈를 사용하는 노드를 추가한다면 Locomotion포즈를 여러 곳에서 사용할 수 있게 된다.
(모두 같은 locomotion 포즈이므로 당연히 동기화 되어있다.)
애니메이션 슬롯
몽타주 애니메이션에서는 어떤 슬롯에서 재생하는 애니메이션인지 설정이 가능하다.
애니메이션 블루프린트에서 창 - 애님 슬롯 매니저를 추가하면 현재 추가된 애님 슬롯을 확인할 수 있다.
기본적으로 애님 슬롯은 그룹단위로 구분되며 그 밑으로 슬롯이 있다.
그리고 원하는 몽타주 애니메이션에 들어가서 Default 슬롯에서 지정하고싶은 슬롯을 선택해주면 된다.
Draw_Montage는 상체만 적용하기 때문에 UpperBody슬롯으로 했다.
애니메이션 블루프린트로 돌아와서 원하는 DefaultSlot 선택 후, Slot Name을 아까 추가한 슬롯을 선택해주면 된다.
이렇게 슬롯을 사용하게되면 이후에 사용하는 모든 몽타주 애니메이션들의 슬롯을 꼭 선택해주어야 한다.
(따라서 Roll과 BackStep 몽타주들도 슬롯을 다 수정해주어야 한다.)
※ Root Motion
Roll과 BackStep 애니메이션 재생 시 캐릭터의 Capsule Component도 같이 이동하는 것을 볼 수 있다.
이는 애니메이션의 Root Motion 때문인데, 특정 애니메이션 재생 시, Root Component가 영향을 받도록 하는 것이다.
Root Motion이 있는 애니메이션 재생되면, Root 컴포넌트에 위치와 회전의 변화를 계속 보내준다.
애니메이션 시퀀스에 들어가면 디테일 내용 중에 Root Motion을 설정할 수 있다.
- Enable Root Motion : 체크 시 애니메이션의 이동 정보를 Root 컴포넌트로 보내준다.
이를 활용하면 애니메이션의 움직임 그대로 실제 대상이 움직이게 할 수 있다.
하지만 애니메이션에 Root Motion이 내부적으로 들어가 있어야만 한다.
◆ Root Motion 주의사항
1. 애니메이션 Root Motion를 만들고 싶다면, 애니메이션 시퀀스에서 키 추가를 통해 루트모션을 직접 만들 수 있다.
2. Root Motion은 x, y축에 대한 물리 적용을 받지 않는다.(z축 중력에 대한 적용은 받는다)
'언리얼엔진' 카테고리의 다른 글
22. 블루프린트 함수 라이브러리 / 애니메이션 스테이트 (0) | 2023.06.01 |
---|---|
21. 연속 공격 구현 / 노티파이 스테이트 (0) | 2023.05.30 |
19. Weapon 교체 로직 / 선택(Select) (1) | 2023.05.26 |
18. Notify(노티파이) (0) | 2023.05.24 |
17. Getter함수 생성 / Montage 애니메이션 섹션 (0) | 2023.05.23 |