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

 

현재 가만히 서서 무기를 조준하기 때문에, [-90°, 90°] 범위 밖의 회전을 수행하면 부자연스럽게 보이는 현상이 있다.

 

 

좌우측 회전에 따라 해당 방향으로 옆으로 도는 애니메이션을 재생해본다.

 

애님 인스턴스에서 가만히 있기, 왼쪽으로 돌기, 오른쪽으로 돌기를 판별하기 위해 열거형을 선언할 헤더를 생성한다.

  • .cpp 소스 파일은 필요 없으므로, 언리얼 에디터가 아닌 VS에서 직접 생성한다.

 


VS에서 소스 혹은 헤더 생성 시, 지워지기 쉬운 Intermediate 폴더가 기본 폴더로 설정되므로 바꿔줘야 한다.

 


VS를 닫은 후 Binaries, Intermediate, Saved 폴더를 지우고 VS 파일을 재생성해주면 바뀐 폴더 구조가 나타난다.

  • .cpp 소스 파일이 없기 때문에 언리얼 에디터에 표시되지는 않는다.

 


Yaw에 접근할 수 있는 캐릭터 클래스에 헤더를 추가하고 열거형 변수와 Getter, 회전에 따라 값은 갱신하는 TurnInPlace() 함수를 선언한다.

  • 클래스명.generated.h 헤더는 무조건 마지막에 포함되어야 한다.
  • 생성자에서 기본값을 설정해준다.

 


매 프레임마다 Pitch, Yaw를 갱신하는 AimOffset() 함수에서 TurnInPlace() 함수를 호출해 TurningInPlace 열거형의 값을 갱신한다.

  • 걷거나 점프 중이면 회전 애니메이션을 재생하지 않도록 한다.

 

 

Yaw가 90보다 크면 오른쪽으로 돌아야 하고, -90°보다 작으면 왼쪽으로 돌아야 한다.

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

 


애니메이션 블루프린트에서 사용하기 위해, 애님 인스턴스에도 TurningInPlace 열거형 변수를 선언한다.

 

 

NativeUpdateAnimation() 함수에서 매 Tick마다 갱신해준다.

 


애니메이션 블루프린트를 수정한다.

 

가만히 서 있을때와 앉아 있을 때, 같은 노드들이 여러 번 사용될 것이므로 포즈 캐시로 미리 만들어준다.

 

 

가만히 있는 Idle 상태에 TurningInPlace 열거형에 따른 옆으로 도는 애니메이션을 재생하도록 한다.

 


90°보다 커지거나 -90°보다 작아질 경우 애니메이션이 재생되지만, 애니메이션 리타겟 시에 문제가 있어서 그런지 오른쪽 발이 조금 떠 있는 것을 볼 수 있다.

 

 

애니메이션을 열고 calf_r Bone을 조금 회전시켜 발을 땅에 닿도록 해준다.

 

 

타임라인 바를 0에 위치시키고 + Key 버튼을 눌러 키를 추가한 후, 회전이 Bake된 새로운 애니메이션을 생성해준다.

  • 같은 작업을 통해 오른쪽으로 도는 수정된 애니메이션도 새로 생성해준다.

 

 

수정된 애니메이션으로 교체해준다.

 

 

애니메이션을 수정해 발이 땅에 닿도록 수정했다.

 

 

이제 멀티 플레이어에서도 잘 작동하는지 확인해본다.

  • VS 파일을 재생성하면 Net Mode가 초기화되므로 다시 설정해준다.

 


클라이언트에서 [-90°, 90°] 범위를 벗어나니 서버에서도 옆으로 도는 애니메이션이 재생된다.

 

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

네트워크 갱신 주기  (0) 2023.04.18
Rotate Root Bone  (0) 2023.04.17
FABRIK  (0) 2023.04.15
회전 리플리케이션 시 고려할 사항  (0) 2023.04.14
Aim Offset 적용  (0) 2023.04.13
profile

Make Unreal REAL.

@diesuki4

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

검색 태그