언리얼엔진/그 외

[UE5] 캐릭터 무브먼트 컴포넌트 작동 순서 정리

mstone8370 2024. 6. 13. 22:16

 

캐릭터의 움직임이 처리되는 순서를 간단하게 정리한것.

피직스 시뮬레이션이나 루트 모션 관련은 제외했음.

TickComponent()
|   서버에 접속한 클라이언트인 경우 서버에서 받은 정보를 통해 위치 업데이트
|   if 캐릭터의 움직임을 처리해야하는 경우. 대부분은 캐릭터가 직접 조종되고있을때.
|       ControlledCharacterMove()
|       |   점프 입력 확인
|       |   가속도 조절
|       |   if Authority를 가지고있을때.
|       |       PerformMovement()
|       |       |   MaybeUpdateBasedMovement()
|       |       |   ApplyAccumulatedForces()
|       |       |   UpdateCharacterStateBeforeMovement()  // 움직임을 처리하기 전에 상태 업데이트. Crouch 상태 업데이트가 여기에서 진행됨.
|       |       |   HandlePendingLaunch()  // Character::LanchCharacter()는 이 시점까지 미뤄짐.
|       |       |   ClearAccumulatedForces()
|       |       |   StartNewPhysics()  // MovementMode에 따라 위치와 물리적인 상태를 변경함. 위치를 변경시키는 주요 함수.
|       |       |   UpdateCharacterStateAfterMovement()  // 움직임을 처리한 후에 상태를 다시 확인해서 업데이트. Crouch 상태 업데이트가 여기에서 진행됨.
|       |   else if 현재 클라이언트에서 작동하고있으며, 이 캐릭터가 플레이어에 의해 조종되는 경우.
|       |       ReplicateMoveToServer()  // PerformMovement()를 호출하는건 마찬가지지만, SavedMove에 현재 상태를 저장해서 서버에 보내주는 과정이 추가됨.
|       |       |   예측에 사용할 SavedMove를 생성해서 현재 상태 저장.
|       |       |   PerformMovement()
|       |       |   서버로 SavedMove 정보 전달
|   else if 현재 서버에서 작동하고있으며, 이 캐릭터가 플레이어에 의해 조종되는 경우.
|       MaybeUpdateBasedMovement()