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

 

Aim Offset의 Axis에 전달할 Yaw와 Pitch 값을 애님 인스턴스에서 관리하도록 한다.

 

 

애니메이션 블루프린트에서 사용하기 위해 Yaw와 Pitch 변수를 애님 인스턴스에 선언했지만, 실제로는 캐릭터와 관련된 값들이기 때문에 캐릭터 클래스를 통해 제공한다.

 

캐릭터 클래스에 Yaw와 Pitch 변수를 선언하고 Getter를 선언한 후, 매 Tick마다 값을 계산하는 AimOffset() 함수도 선언한다.

  • 어느 방향을 보고 있든 동일한 Pitch와 달리, Yaw는 기준 회전으로부터의 차이만큼 계산해야 하기 때문에 StartingAimRotation 변수를 선언한다.

 


헤더를 포함한다.

 

 

Aim Offset을 통한 무기 조준에서 Yaw는 무기를 들고 멈춘 상태에서만 반영할 것이다.

  • 따라서 움직이는 동안, 매 Tick마다 기준 회전을 저장해야 한다.
  • Aim Offset을 사용하기 위해서는, 걸을 때와 멈췄을 때 bUseControllerRotationYaw 옵션을 바꿔줘야 한다.

 

멈췄을 때는 마지막 기준 회전과 현재 조준하고 있는 회전의 차이를 UKismetMathLibrary::NormalizedDeltaRotator() 함수를 통해 구한다.

  • 만약, 방향(부호)이 반대로 바뀌어 동작하면 두 회전의 순서를 바꿔 전달해주면 된다.

 

Pitch는 가만히 있거나 걷는 것과 상관 없이 반영한다.

 


애님 인스턴스의 NativeUpdateAnimation() 함수에서 캐릭터의 Getter를 통해 Yaw와 Pitch 값을 갱신해준다.

  • 캐릭터 클래스의 Tick() 함수가 수행된 이후에, 애님 인스턴스의 NativeUpdateAnimation() 함수가 실행된다.

 

 

무기를 장착했을 때의 상태 머신의 포즈 캐시를 만든다.

 


Skeleton에서 블렌딩 시 나눌 기준이 될 spine_01 허리 Bone을 확인하고 Layered blend per bone 노드에 설정해준다.

 


Layered blend per bone 노드에 spine_01 Bone 윗 부분에 적용될 Aim Offset을 연결해 애님 그래프를 아래와 같이 수정한다.

  • Aim Offset에는 꼭 그에 맞는 Base Pose를 지정해주어야 한다.

 

 

그냥 총을 들고 있을 때는 정상적으로 작동하지만, 조준하고 있을 경우에는 뭔가 이상하게 보인다.

  • 그냥 총을 들고 있을 때 동작하도록 만든 HipAimOffset에 조준할 때의 포즈가 Base Pose로 전달되었기 때문이다.

 

 

반대로, 조준하고 있을 때 동작하도록 만든 AimAimOffset에 그냥 총을 들고 서 있을 때의 포즈가 Base Pose로 전달된다면, 그때도 이상하게 보일 것이다.

 

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

FABRIK  (0) 2023.04.15
회전 리플리케이션 시 고려할 사항  (0) 2023.04.14
Aim Offset  (0) 2023.04.12
조준하면서 걷기  (0) 2023.04.12
웅크린 상태에서 점프하기  (0) 2023.04.11
profile

Make Unreal REAL.

@diesuki4

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

검색 태그