🎮Unreal4

[UE4] Player 이동 시 애니메이션 튀는 문제 해결 (BP/C++)

공대 컴린이 2023. 4. 10. 17:28
728x90

💡 Player 이동 시 애니메이션 튀는 문제 해결

🚩 BluePrint 버전

이전에 만들어두었던 플레이어의 이동에서 살짝씩 애니메이션이 튀는 문제가 발생하였다.

 

ABP_Character - 이벤트 그래프 (기존 버전)

그 원인은 Calculate Direction 함수에 들어가는 캐릭터의 Velocity값과, Get Control Rotation인 카메라의 방향값에 대한 혼동 때문이다.

액터가 바라보는 방향과 카메라가 바라보는 방향이 다르기때문에 둘 중 한 값으로 설정되며 값이 왔다갔다 하기 때문이다.

 

ABP_Character - 이벤트 그래프 (버그 해결 버전)

이 문제를 해결하기 위해 이전에 사용했던 Calculate Direction 함수를 빼고, 캐릭터의 Velocity 방향과, 카메라의 방향을 Delta(Rotator) 함수에 입력하였다.

 

Delta 함수는 두 방향 벡터간의 차를 구하여 Normalize 해준다. 즉, A와 B를 뺐기 때문에 둘 중 하나의 값을 선택하는 것이 아닌, 두 값의 중간값을 Direction으로 설정하게 된다.

 

ABP_Character - 이벤트 그래프 (최종 버그 해결 버전)

이후, 프레임이 급격하게 변할 때 캐릭터의 회전이 끊어질 가능성을 없애기 위해 이전 Direction과 현재의 방향으로 바뀔 Direction을 보간하여 적용하면 된다.


🚩 C++ 버전

UCAnimInstance::NativeUpdateAnimation

Cpp 클래스에서는 위와같이 코드를 작성하면 된다.

 

플레이어의 전방 방향의 회전값(GetVelocity().ToOrientationRotator())과 이동하려는 회전값(GetControlRotation())의 두 사이를 NormalizedDeltaRotator로 정규화하여 플레이어의 이전 방향과 보간한 뒤 Direction을 초기화 해 주었다.

 

이로인해 플레이어가 방향을 틀어도 이전 방향과 보간되어 튀는 현상없이 Direction이 점차점차 변화하게 된다.

728x90