회전 보간 속도 설정
FRotator rotation = Velocity.ToOrientationRotator();
FRotator controlRotation = OwnerCharacter->GetControlRotation();
FRotator delta = UKismetMathLibrary::NormalizedDeltaRotator(rotation, controlRotation);
PrevRotation = UKismetMathLibrary::RInterpTo(PrevRotation, delta, DeltaSeconds, 25);
Direction = PrevRotation.Yaw;
- Direction 구하기
- 위의 코드는 애니메이션 블루프린트에서 Direction을 구하고 보간을 하는 코드를 나타낸 것이다
- 캐릭터가 이동하는 방향의 회전 값을 가져오기 위해 FVector로 된 속도 Velocity를 회전 값으로 변환해 rotation 변수에 저장해준다
- controlRotation에는 카메라가 바라보는 방향을 가져와 저장해준다
- 이렇게 구한 두 회전 값의 차이를 구하면 두 벡터사이의 틀어진 값을 구할 수 있는데 이를 정규화를 통해 단위 벡터로 만들어 delta 변수에 저장해준다
- PrevRotation을 delta 방향으로 일정 속도만큼 매 프레임 보간을 해준뒤 Yaw 값만 Direction에 저장해주면 된다
- 왜 이렇게 구하나?
- 결론부터 얘기하면 내가 바라보고 있는 방향과 실제 이동 방향의 차이 때문이다
- 일반적으로 카메라의 정면 방향에 상관없이 캐릭터의 방향이 변환다면 상관이 없을 것이다
- 하지만 내가 보고 있는 방향은 고정되고, 실제 이동 방향을 구할 땐 말이 달라진다
- 일단 전자를 생각해보면 카메라의 방향과 상관없이 입력된 방향으로 캐릭터를 Yaw 회전 시키기만 하면 될것이다
- 하지만 후자는 입력 값에 따라 캐릭터의 몸이 회전하지 못하고 카메라의 정면으로 고정되어 있을 때 두 회전 값 사이에 틀어진 정도중에서 Yaw 값을 가져와 그 방향으로 이동을 시키기 위한 과정이다
- 그러기 위해 두 회전 값의 차이를 정규화 회전값을 안정적으로 유지하고 연산 시 예측 가능하게 해주고, 더욱 자연스러운 움직임을 위해 이전 회전값에 좀전에 구한 회전 값을 보간하여준다
- 이렇게 구한 값의 Yaw 값을 이용하여 캐릭터의 이동 방향을 구해주어 애니메이션을 섞은 블랜드 스페이스와 적절하게 사용해주면, 카메라가 바라보는 방향으로 캐릭터의 몸이 고정되었지만 여러 방향으로 이동하는 애니메이선을 적용시킬 수 있게된다