UE5/Devlog

[UE5] Last Bot Standing Devlog - 15

sulfurman 2026. 2. 15. 16:08

 안녕하세요 반갑습니다.

오늘은 근 한달간 다인칭 시점 작업과, 그에 맞는 애니메이션 수정 작업들을 갈무리해보는 시간을 가질 겁니다.

시점 관련 작업에 대한 결과가 어느정도 자리를 잡게 되면서, 이를 한번 정리해보고 싶어 글을 작성하게 됐습니다.

저번 글과 중복되는 내용이 많지만, 더 자세하고 완성도 있는 내용으로 재구성 했습니다.


 

애니메이션 파이프라인 최종본

 

캐릭터 애니메이션은 크게 세가지 파트로 모듈화 되어있다.

 

1번 모듈 (ABP_FPSCharacter)                                             1인칭 시점의 캐릭터 애니메이션 

2번 모듈 (ABP_PUBGCharacter + ABP_GenericRetarget)  3인칭 시점의 캐릭터 애니메이션

3번 모듈 -(ABO_TLBPCharacter)                                         1+3인칭 블렌딩 애니메이션

 

각 모듈은 거의 독립적이어서 수정이 굉장히 용이하다.

 

 

1번 모듈

  • 무기와 관련된 모든 애니메이션을 총괄하고, 캐릭터의 상반신에만 관여한다.
  • 가장 먼저 메인 애니메이션 재생 구간에서 중심이 되는 애니메이션을 재생한다.
    • 무기별로 각기 다르게 세팅되어있는 CharacterAnimSettings을 읽어 상황에 맞는 몽타주를 ABP_FPSCharacter의 DefaultGroup.Default 슬롯에서 재생시킨다.
  • 그외 움직임은 디테일 애니메이션 재생 구간에서 처리하게 된다.
    • 총 세 개의 ABP에서 반동, IK, Gait에 따른 움직임, 기타 디테일 애니메이션을 가상본 조작 + 애니메이션 시퀀스를 통해 조절한다.

2번 모듈

  • 캐릭터의 기본적인 움직임 애니메이션을 총괄하고, 캐릭터의 전신 모두 관여한다.
  • 스냅샷을 이용한 래그돌 애니메이션도 이 구간에서 처리한다.
  • 또한 스켈레탈 메시가 리타게팅되는 지점이다.
    • 기본적인 움직임 애니메이션 + 래그돌 애니메이션이 적용된 CBP_PUBGCharacter의 포즈를 전부 추출한다.
    • 추출한 포즈를 언리얼 엔진의 리타게터로 다른 스켈레탈 메시에 적용시킨 ABP가 바로 ABP_GenericRetarget이 된다.

3번 모듈

1번과 2번 모듈에서 얻은 ABP를 상황에 맞게 적절히 블렌딩해 최종 출력 애니메이션을 재생한다.

Unarmed 상태에서의 Sprint

  • Unarmed(비무장 상태) - Retarget을 전신에 출력한다.

 

Armed 상태에서의 Traversal, Sprint

  • Armed(무장 상태) - 상반신은 FPS, 하반신은 Retarget을 출력한다.Armed에서의 Sprint 혹은 Traversal
    (무장상태에서의 전력질주, 파쿠르)
    오른쪽 쇄골은 FPS, 그외 부분은 Retarget을 출력한다. (왼쪽 손을 사용해 파쿠르, 오른쪽 총을 들고 전력 질주)

 

Ragoll

 

  • Ragdoll(래그돌) - 무장 여부와 상관없이 Retarget을 전신에 출력한다.

 

2번 모듈은 기존 ABP에서 리타게팅 작업만 가미된 것이고,

1번 모듈은 FPS 에셋을 내 프로젝트에 호환되도록 수정한 것이다.

 

1번 모듈에서의 애니메이션의 작동은 다음 일련의 과정을 거친다

  • Input Polling & State Update (입력 감지 및 상태 갱신)
    • 플레이어의 입력을 감지하여 FCharacterInputState_Cpp 구조체의 플래그(WantsToFire, WantsToReload 등)를 갱신
  • Action Trigger (액션 트리거)
    • 갱신된 상태에 따라 CombatComponent의 특정 메소드(예: ServerFire, ServerReload)를 호출
  • Data Asset Retrieval (데이터 에셋 참조)
    • 현재 장착된 무기(EquippedWeapon)에서 WeaponData (DataAsset)를 로드
  • Animation Setting Extraction (애니메이션 세팅 추출)
    • WeaponData 내부의 CharacterAnimSettings(캐릭터용)와 WeaponAnimSettings(무기용)를 가져옴
  • Synchronized Playback (동기화 재생)
    • 추출한 두 개의 몽타주(Montage)를 캐릭터 메시와 무기 메시에 동시에 재생

발사 애니메이션, 재장전 애니메이션

 

한마디로 입력 -> 데이터 참조 -> 애니메이션 재생 이라고 할 수 있다.

 


 

마지막으로 카메라 세팅

카메라는 플레이어의 시점에 따라 총 5가지 상태로 세분화했다.

  • 3인칭: 일반(Idle) / 견착(Aim)
  • 1인칭: 일반(Idle) / 견착(Aim) / 정조준(ADS)

Camera Transform

 

 카메라의 위치 제어와 시점 전환은 주로 소켓(Socket) 부착 방식을 활용해 구현했다.
특히 정밀함이 요구되는 1인칭 정조준(ADS) 상태에서는,

총기 스켈레탈 메시의 가늠좌 바로 뒷부분에 AimPoint라는 별도의 소켓을 생성하고

카메라를 해당 위치에 직접 부착(Attach)하는 방식을 채택했다.

추가적으로 각 상태에 맞는 FOV(시야각)와 트랜스폼(Transform) 값을 미세 조정하여 최적의 화면 구도를 설정했다.

 


마치며

다인칭 작업이 드디어 끝이 보입니다.

자잘한 오류랑 디테일만 챙기면 마무리 될 것 같아요.

아마 다음 일지는 게임 모드, 스테이트 에 관한 내용으로 돌아올 것 같습니다.

이번 일지는 여기까지 하겠습니다!

다음 일지 때 봅시다 !