Make Unreal REAL.
article thumbnail
Unreal Engine 5 C++ Multiplayer Shooter

 

무기 장착 시에 와리가리를 하기 위해서는 캐릭터가 항상 앞을 보고 있어야 하는데, 현재는 그렇지 않다.

 

 

Combat 컴포넌트에서를 장착 시에 항상 앞을 보고 컨트롤러의 회전을 따르도록 변경한다.

 

 

서버에서는 서버에서만 실행되는 EquipWeapon() 함수에서 설정해준다.

 

 

클라이언트에서는 RepNotify 함수를 통해 적용해주도록 한다.

  • 장착한 무기 액터 변수인 EquippedWeapon은 원래 복제된 변수였다.

 

 

이제 항상 컨트롤러의 Yaw와 동기화된 앞 방향을 보고 있는 것을 확인할 수 있다.

 

 

무기를 장착하고 걸을 때 재생되는 EquippedRun 블렌드 스페이스의 두 축에 적용할 값인 YawOffset과 Lean을 애님 인스턴스에 생성한다.

  • 현재 블렌드 스페이스는 아래와 같다.

 

 

헤더를 포함한다.

 

 

와리가리 시에 블렌드 스페이스에서 재생할 지점을 정하기 위해서는, 캐릭터의 이동 방향과 컨트롤러의 시선 방향을 알아야 한다.

  • APawn::GetBaseAimRotation() 함수를 통해 폰을 조종 중인 컨트롤러의 시선 방향을 알 수 있다.
  • UKismetMathLibrary::MakeRotFromX(APawn::GetVelocity()) 함수를 통해 폰의 이동 방향을 알 수 있다.

 

 

값을 확인해보면 GetBaseAimRotation() 함수는 폰 기준 로컬 회전 값이 아닌, 월드 기준 회전 값을 반환하는 것을 볼 수 있다.

  • 시계 방향으로 0 --> 180(-180) --> 0의 값을 갖는다.

 

 

GetVelocity() 함수를 통해 구한 이동 방향도 월드 기준인 것을 알 수 있다.

  • 마찬가지로, 시계 방향으로 0 --> 180(-180) --> 0의 값을 갖는다.

 

 

이번에는 로컬이 아닌 다른 컴퓨터에서도 같은 값이 출력되는지 확인해본다.

  • 서버가 아니고 로컬에서 조종 중이 아닌, 즉 다른 클라이언트의 Simulated Proxy와 로컬에서 조종 중인 Autonomous Proxy에서 값을 출력해본다.

 

 

캐릭터의 이동 방향은 로컬과 원격 모두 동일하지만, 컨트롤러의 시선 방향은 다른 것을 확인할 수 있다.

 

로컬에서는 카메라가 보는 방향이 컨트롤러의 시선 방향이 되지만, 원격에서 동기화된 캐릭터는 컨트롤러의 시선 방향의 Yaw에 캐릭터의 앞 방향이 적용된다.

  • 사실 이건 Orient Rotation to Movement 옵션이 켜져있어서 그렇고, Use Controller Desired Rotation 옵션만 켜져있을 경우 Pitch, Yaw, Roll 모두 동기화된다.

 

 

UKismetMathLibrary::NormalizedDeltaRotator() 함수를 통해, 두 회전(방향)의 Z축 차이를 YawOffset에 저장한다.

  • 어떤 시선 방향이든, 앞으로 이동 중이면 차이는 0°가 된다.
  • 어떤 시선 방향이든, 우측 후진 중이면 차이는 135°가 된다.

 


우선 무기를 장착하고 걸을 때, 시야 조정에 따른 기울임 정도인 Lean은 두고 와리가리가 정상 작동하는지만 먼저 테스트해본다.

 

 

블렌드 스페이스를 통해 어떤 시선이든, 이동 방향에 따라 와리가리가 되는 것을 확인할 수 있다.

 

 

다만, 앞에서 뒤 혹은 좌에서 우로 전환할 때 캐릭터의 이동 방향에 따라 YawOffset이 너무 순식간에 변하면서 애니메이션이 튀는 것을 볼 수 있다.

 

FRotator 타입의 임시 변수를 선언하고 FMath::RInterpTo() 함수를 통해, 목표인 DeltaRot을 향해 DeltaRotation을 서서히 보간하도록 한다.

 

 

블렌드 스페이스에서 애니메이션 보간 시 튀는 현상이 사라지고, 부드럽게 전환되는 것을 확인할 수 있다.

 

'Unreal Engine > UE5 C++ Multiplayer Shooter' 카테고리의 다른 글

점프 애니메이션  (0) 2023.04.09
시야 조정에 따른 몸 기울임(Leaning)  (0) 2023.04.08
블렌드 스페이스  (0) 2023.04.07
조준 동작 동기화  (0) 2023.04.06
웅크리기 동작 동기화  (0) 2023.04.05
profile

Make Unreal REAL.

@diesuki4

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그