본문 바로가기

Unreal/Udemy 강의

Unreal Engine 4 C++ The Ultimate Shooter Course Section 8-4

Turn in Place using Curve Values

만든 커브 값을 이제 적용해보자.

기존의 TurnInPlace() 함수에 추가로 작성해줄 것이다.

우선 기존의 RootYawOffset 값은 -180~180 값의 범위를 넘지 않도록 NormalizeAxis 함수를 사용한 코드로 수정하였다.

다음으로 커브 값을 가져와 우선 변수에 저장해주었다.

 

이후 필요한 변수를 선언해주자.

회전 커브 값과 직전 회전 커브 값이 필요하다.

 

이를 토대로 다시 구현을 이어서 해주자.

직전에 저장한 Turning 값이 0보다 크다면 회전 애니메이션이 재생 중인 것이다.

각 회전 커브 값을 할당해주고, 둘의 회전 차이 값을 저장해주자.

 

이후 RootYawOffSet 값을 토대로 0보다 크다면 회전 값을 빼주고, 0보다 작다면 회전 값을 더해주자.

각각 좌회전과 우회전을 담당한다.

 

그리고 RootYawOffset 값을 보정해줄 것이다.

해당 값이 과도하게 회전하지 않도록 방지하기 위해 회전 기준인 90도를 기준으로 넘치는 값을 체크해줄 것이다.

넘치는 값 계산후 해당 값만큼 또 자회전과 우회전 값을 체크하게 된다.

 

예를 들어서 RootYawOffset 값이 110도라면, 넘치는 값은 20도이다.

따라서 110도에서 20도 만큼 빼줘서 90만큼 회전하도록 방지하는 것이다.

부호에 따라 -110도라면 반대로 20만큼 더해서 -90만큼 회전하도록 방지한다.

 

이제 Speed > 0 일 때도 체크해주자.

캐릭터가 이동 중일 때는 애니메이션을 중지하고 위치를 초기화해주어야 한다.

회전 값들을 현재 회전 값으로 재설정하고, 커브값 및 RootYawOffset 값 또한 0으로 초기화해준다.

 

다음으로 애니메이션을 수정해야 한다.

지금 상태로 컴파일 하면 재장전 중이거나 총을 쏘는 동안에 제자리 회전 시 회전이 반영되지 않는다.

 

아래 코멘트를 했던 애니메이션 부분을 살펴보자.

기존 Cached Weapon Fire 애니메이션에 Reload 슬롯을 추가해주자.

그리고 해당 애니메이션을 통해 blend를 해주자.

이를 통해 재장전 모션을 상체에만 적용시켜줄 것이다.

 

그리고 Rotate Root Bone 부분을 살펴보자.

재장전을 앞에서 적용해주었기에, 기존의 Cached Hip to Aim with Reload를 삭제하고 Cached Hip to Aim을 사용하자.

재장전 모션이 상체에만 적용되도록 blend를 해주었기 때문에 Base Pose인 회전 값이 반영되어 재장전 중에도 제자리 회전이 무사히 동작한다.