[Unreal] 22일차 - 캐릭터 점프, 이동(FSM, Blend Space), 달리기 모드, 애니메이션 몽타주

2024. 8. 16. 22:50Unreal Engine

728x90
반응형

캐릭터 점프, 이동

ABP_Player 애니메이션 블루프린트를 더블클릭하여 연다.

 

 

점프를 위해서 New_JumpStart 애니메이션 드래그해서 넣는다.

 

 

점프 애니메이션으로 가는 트랜지션 더블 클릭해서 편집. 공중에 떠 있을 때 점프를 시작하도록 한다.

IsInAir bool Variable 추가, True일 때 New_JumpStart 애니메이션 추가

 

 

New_JumpLoop 추가, [Automatic Rule Based on Sequence]를 체크하면 자연스럽게 blend 되면서 애니메이션이 연결된다. 자동으로 연결된다는 말.

 

 

New_JumpEnd 추가

 

 

New_JumpLoop에서 New_JumpEnd로 갈 때의 트랜지션 더블클릭해서 수정한다.

 

 

New_JumpEnd에서 Idle로 넘어갈 때도 자동으로 넘어가도록 체크

 

 

오른쪽 아래 프리뷰 창에서 Is in Air를 체크하면 뜨고 체크 해제하면 내려오는 것을 볼 수 있다.

 

 

이제 ABP_Player의 EventGraph 수정

Is Falling 노드를 검색해서 중간에 넣었다.

 

 

이제 제자리 점프는 잘 되지만 이동 점프는 어색하다.

 

 

현재 상태에서 좌, 우 이동까지 추가해서 연결하는 건 너무 복잡해진다.

 

 

Blend Space를 이용해서 이동 관련 블루프린트 간소화 한다.

Animations 폴데에서 [Animation] - [Blend Space] 추가

 

 

SK_Mannequin 선택

 

 

BS_PlayerMove 이름으로 생성

 

 

더블클릭해서 편집 창으로 들어온다.

 

 

좌측에서 Horizontal과 Vertical 이름을 바꾼다.

 

 

Character Movement의 Max Walk Speed가 600cm/s이기 때문에 BS_PlayerMove의 Axis Value 값도 -600~600으로 설정

 

 

Grid Divisions를 6으로 높여서 격자의 간격을 200씩 표현하도록 수정했다.

 

 

Idle 애니메이션을 드래그해서 가져오는데 Shift 키를 누르면 snap이 걸려서 (0,0)에 배치하기 쉽다.

 

 

Forward, Backward, Left, Right 애니메이션을 다 배치하면 마름모 모양이 만들어진다.

 

 

Ctrl을 누른 상태로 마우스 클릭 없이 이동만 하면 십자 표시가 움직이면서 Blend되는 애니메이션을 볼 수 있다.

 

 

Blend Space를 저장하고, ABP_Player로 돌아간다. 해당 부분을 Blend Space로 교체하기 위해서 삭제.

 

 

그 자리에 BS_PlayerMove를 놓고 트랜지션을 연결한다.

 

 

BS_PlayerMove에서 New_JumpStart 가는 트랜지션은 공중일 때 참 값을 가져오므로 아래와 같이 설정.

 

 

New_JumpEnd에서 BS_PlayerMove로 돌아올 때는 자동으로 돌아오게 체크박스 체크

 

 

BS_PlayerMove를 더블클릭해서 들어오고, Speed 변수는 Speed 부분에, Direction 변수는 Speed 변수를 복제해서 Direction 부분에 연결한다.

 

 

Direction에 값을 넣는 방법은 EventGraph에서 해주면 된다.

[Get Actor Right Vector] 노드를 생성해서 속도를 받아 내적하여 [Direction]에 Set으로 넣어준다.

 

 

앞뒤좌우, 점프까지 잘 되는 것을 볼 수 있다.

 

 


 

 

캐릭터 달리기

BS_PlayerMove로 와서, New_Jog_방향 애니메이션을 이용해서 달리기 애니메이션을 넣을 것이다.

기존에 썼던 걷기는 200 라인에 재배치

 

 

Jog 애니메이션을 600 라인에 배치했다.

 

 

Blend 되어 서서히 빨라지는 애니메이션을 볼 수 있다. 하지만 막상 실행해서 보면 게임 내에서는 무조건 뛰기만 한다.

 

 


 

 

달리기 모드를 따로 만들기

달리기 모드일 때를 표시하기 위해 Input을 추가한다.

Input 폴더 내에서 IA_GrenadeGun을 복제하여 IA_Run을 생성했다.

 

 

IMC_TPS에 새로운 키를 매핑한다. Left Shift 키를 새로 넣었다. 해당 버튼을 누르면 달리기 모드로 변경.

 

 

BP_Player의 EventGraph로 가서,

키를 누르고 있을 때(Started일 때) Character Movement의 Max Speed를 600으로, 뗐을 때(Completed일 때) 200으로 설정한다. Character Movement의 Max Speed의 초기 값은 200cm/s로 설정.

 

 

잘 작동한다.

 

 

좌우로 전환할 때 약간 버벅이는 느낌이 있어서 BS_PlayerMove에서 Weight Speed 값을 0에서 4로 올리니 더 부드러운 전환이 가능하다.

 

 


 

 

총 쏘는 애니메이션 추가

BP_Player에서,

총 쏘는 모습을 더 잘 보기 위해서 SrpingArm의 [Target Arm Length]는 100으로 줄이고, Y값은 35에서 45로 높였다.

 

 

AnimStarterPack 안에 있는 "Fire_Rifle_Ironsights" 애니메이션을 Retarget하여 가져온다.

 

 


 

 

애니메이션 몽타주

Section 개념을 이용하여 애니메이션 뜯어붙이기. 몽타주는 FSM에서 컨트롤되지 않는다. 하체는 FSM을 따라가고 그동안 상체에서 총을 쏘는 행동을 할 수 있다. 별도 재생이 큰 장점. 섞어서 사용할 수 있다.

 

 

Retarget한 Fire 애니메이션을 우클릭, [Create] - [Create AnimMontage]를 누르면 몽타주 사용 가능.

 

 

ABP_Player의 AnimGraph에서, "default slot"을 검색하여 FSM과 출력 포즈 사이에 배치하고 연결한다.

 

 

ABP_Player의 EventGraph로 와서, 발사와 관련 있는 노드를 수정한다.

Mesh에 애니메이션 블루프린트가 들어있으므로 드래그하고, [Play Montage] 노드를 추가하여 우리가 위에서 만들었던 애니메이션 몽타주를 설정한다.

 

 

몽타주의 Blend In/Out은 0.25에서 0.1로 수정한다. 제대로 애니메이션이 나오기도 전에 Blend 되어서 안보이기 때문.

 

 

여기까지 잘 되었다면 총을 한 번 쏠 때마다 반동 애니메이션이 한 번씩 나오는 것을 볼 수 있다.

 

 

다시 SringArm을 100에서 300으로 놓고 보면 걸을 때 쏘는 애니메이션이 매우 어색해보인다.

 

 

내 몽타주 데이터와 FSM 걷는 데이터가 정리가 되어있지 않기 때문.

ABP_Player의 AnimGraph에서 수정해야 한다.

MoveFSM을 캐싱해서 변수처럼 쓰려고 한다. "cache"를 검색해서 [New Save cached pose...] 노드 연결하고 "MoveCache"로 이름을 바꿨다.

 

 

사용할 때는 이름으로 검색 가능하다.

 

 

캐싱한 FSM을 사용하여 아래와 같은 노드 연결을 하고, [Layered blend per bone] 노드를 눌러서 우측에서 index에 "spine_03"을 입력하면 발사할 때 어깨가 움직이는 것을 볼 수 있다.

 

 

몽타주 관련 애니메이션은 다음 시간에 계속...

728x90
반응형