반응형

CT_Cmpt_Locomotion 에서 하는일은?

ALC(Advanced Locomotion Component) 에서 가장 중요한 기능을 하는 부분이 액터컴포넌트 블루프린트인 CT_Cmpt_Locomotion  입니다. 이 블루프린트에서 RPC( Remote Procedure Call(원격 프로시저 호출) )까지 사용하면서 데이터 통신을 하도록 설계되어 있고, 모션의 최종 결정을 하는데 있어서 중요한 정보들을 결정 짓게 합니다. 따라서 여기서 결정되는 모든 정보는 현재 플레이 중 메인 Pawn의 캐릭터 BP / 애님 BP와도 모두 공유하게 됩니다.

RPC에서 설정된 변수들은 데이터 테이블에 이미 등록되어 있는 정보들을 캐릭터의 실제데이터로 만들어주는 역할을 하게 됩니다.

 

다만 CT_Cmpt_Locomotion에도 역시나 너무나 많은 기능들이 있기 때문에, Unarmed 모드 주요 기능 처리 부분만 먼저 다루도록 하겠습니다.

 

Begin Play

  • 현재 플레이에서 메인 Pawn 정보를 얻어와서 메인 Pawn의 Rotation Mode를 체크한다.
    • 체크 후 Forward-facing( Unarmed 모드) 모드 일 경우 캐릭터 무브먼트를 '무브먼트 방향으로 회전 조정' 을 사용한다. 3인칭 시점인 Velocity Mode를 사용하겠다는 뜻이다. 

 

Event Tick

  • 현재의 무브먼트 모드를 실시간으로 체크하여 캐싱해주고, Ground(Not Air) 상태일 때 Acceleration 값을 커스텀이벤트로  체크하고, Spint 기능도 커스텀 이벤트로 실시간으로 체크하게 된다.

  • Check Acceleraition -  Custom Event
    • Has Acceleration 변수값으로 현재 이동값이 들어갔는지 체크한다.
    • Has Acceleration값이 있을 경우 Last Direction을 체크하여 캐릭터의 방향도 체크한다. 여기서 결정된 값에 의해 AnimBP에서 캐릭터의 Start 모션을 결정하게 된다.

  • 여기서 결정되는 Has Acceleration은 서버에서 실행(Excutes On Server)되는 변수로서 서버에서 언제든 읽기 쓰기가 가능한 네트워크 리플리케이트 변수로 설정되어 지속적으로 모든 영역에서 체크되게 된다.

  • Call Event On 기능을 쓰기 위해서는 이벤트 디스패처로 등록해서 사용해야 한다.

  • Anim Graph에서 위 이벤트 정보를 받아서 사용하는 방법
    • 메인 Pawn으 애님 BP의 Begin Play 이벤트에서 Initialization 함수에서 Ct_Cmpt_Locomotion를 Get Component by Class로 변수를 등록하고 이벤트를 받아서 바인딩하여 사용합니다.

 

  • Update Sprinting Value - Custom Event
    • 왼쪽 Shift를 길게 누르면 스프린트 기능이 활성화 되게 되는데, 그것을 체크하여 스프린트인지 아닌지를 모든 영역에 알려주는 역할을 하고 Set Movement Config에 스프린트 설정값으로 무브먼트 속도를 맞추게 됩니다.
    • 스프린트  기능이라 별로 기능이 없을 거 같지만, Current Movement Config의 값을 변경하게 되면서 그에 따른 Data테이블의 애님셋 정보를 읽어와서 회전량, 마찰값등을 다시 설정하게 되므로 꾀 많은 로직이 일어나게 되는 부분이다.

  • Is Sprinting 변수를 Replicate로 설정
    • Get Is Sprint 함수가 스프린트값을 보조해 줘서 스프린트가 True 일경우에 대한 Velocity Direction값을 스프린트값에 맞도록 딜레이 시켜주는 역할을 한다. 해당 기능은 조작감 이슈가 있어 호불호가 갈리는 기능이라 딜레이를 없애서 사용하는 경우도 많다.

  • Sprint Value 값 서버로 전송
    • 그러기 위해 이벤트 디스패처로 등록하여 다른 곳에서 손 쉽게 쓸수 있도록 한다.

  • 위 정보를 토대로 'BP_Character' 캐릭터 블루프린트에서 CT_Cmpt_Locomotion의 이벤트의 정보를 실시간으로 쓸 수 있게 된다.

  • Anim BP에서 바인드하여 Sprint 정보 사용
    • Ct_Cmpt_Locomotion에서 등록된 Replicate형 변수들은 다 동일하게 호출하여 사용합니다.
    • IsSprint 변수값을 이용해 Anim Set Structure에서 애님셋 데이터 값을 불러와 Sprint 상태 Value값을 Set Animation Datas 함수에서 사용하게 됩니다.

 

Unarmed 모드에서 사용하는 추가적인 이벤트 디스패처 값.

  • Evnet_OnSetMovementType
    • Enum파일인 Enum Movement Type 을 사용하여  무브먼트 상태값을 공유하게 됩니다.

  • Anim Graph에서 사용
    • Ct_Cmpt_Locomotion 이벤트를 바인드하여 해당 상태값을 변수로 등록하여 사용하게 됩니다.
    • Set Animation Datas 에서 LS AnimSet 파일을 호출하여 LS Movement Type으로 사용하게 됩니다.

 

  • Event_OnSetAnimset
    • 등록된 이벤트 디스패처를 이용하여 Anim Set Name에 따른 Anim Set Data table 정보를 얻어오는데 사용되게 됩니다.

  • Anim BP에서 사용
    • 위 이벤트 디스패처들과 동일하게 Bind 하여 사용.

 

Ct_Cmpt_Locomotion에서 Unarmed 모드를 작동하는데 필요한 이벤트는 위 정보만 있으면 됩니다. 나머지 이벤트 디스패처 내용들은 Unarmed가 아닌 다른 무기와 다른 로테이션 모드등에서 필요한 정보들이라 Unarmed에서는 필요하지 않은 정보들입니다. 다음 포스팅에서는 Anim Blueprint 작동 내용에 대해서 가이드해 드리도록 하겠습니다.

반응형

+ Recent posts