Character Movement Component In-Depth
강의 시리즈를 공부하면서 한글로 정리한 포스트입니다. 의역과 오역이 난무하니 주의해주세요!
https://youtu.be/urkLwpnAjO0?si=ZzIrCFjw58bE8Yy9
캐릭터 무브먼트 컴포넌트(이하 CMC)는 언리얼 엔진의 캐릭터를 상속받은 클래스에 포함된 액터의 구성 요소로, 캐릭터에서 전송되는 입력 벡터를 취하고 이를 사용하여 여러 무브먼트 모드가 포함된 캐릭터의 트랜스폼을 다룬다.
이 클래스를 커스텀 CMC로 확장하면 강력한 기능이 발휘된다. 새로운 무브먼트 모드를 만들고, 전력질주와 같은 상태 변경이나 대시와 같은 이벤트처럼 캐릭터가 이동하는 방식을 변경하는 함수를 CMC에 작성할 수 있다.
CMC를 확장하려면 C++이 요구되므로, 블루프린트 프로그래머는 기본 CMC 기능에 가까운 게임을 만드는 것이 좋다.
이제 게임에 커스텀 CMC가 필요한지 판단할 수 있는 세 가지 카테고리를 살펴보겠다.
클라이언트가 권한을 갖고(치트나 핵같은 부분에 신경을 쓰지 않아도 되는 경우) 걷기, 질주, 수영 등과 같은 매우 표준적인 인간형 움직임만 사용하는 경우엔 기본 CMC를 사용하는 것만으로도 충분할 것이다. 이런 경우. CMC에 내장되어 있지 않은 기능은 블루프린트를 약간만 수정하는 것으로도 쉽게 구현할 수 있다. (EX : Max Walk Speed 만 수정하면 되는 스프린팅과 같은 경우)
오프라인 게임에서만 정상적으로 작동한다는 것을 참고하자. 만약 벽 달리기나 행글라이딩과 같은 복잡한 움직임을 사용하고 싶다면, 중력 조절과 같은 기능을 수정하여 가능하게 만들 수는 있지만 벽에 부딪힐 확률이 높으므로 커스텀 CMC를 만드는 것을 추천한다.
fps, MMO, 배틀 로얄과 같은 일반적인 멀티 플레이어 게임을 만들고 있다면, 커스텀 CMC를 반드시 사용해야 한다.
다음의 두 가지 경우는 CMC를 확장할 필요가 없을 수도 있다.
탱크나 새와 같이 인간형이 아닌 플레이어가 있거나 캐릭터가 물리 기반인 경우.
오프라인 게임을 만든다면 CMC나 캐릭터를 사용하지 않고 폰 클래스를 상속받거나 자신만의 무브먼트 클래스를 만드는 것을 추천한다.
하지만 멀티플레이어 게임을 만든다면, 캐릭터를 사용하고 CMC를 확장하는 것을 추천한다. 비록 플레이어가 이 구조에 적합하지 않다고 느껴지더라도, CMC가 제공하는 장점은 매우 중요하다. 캐릭터 기반 클래스를 사용하는 경우의 유일한 단점은, 캡슐 콜라이더 사용이 고정된 것 뿐이다. 만약 새를 사용하는 경우, 캡슐의 절반 높이를 반경과 동일하게 설정하면 스피어 콜라이더로 만들어지므로 이 문제를 해결할 수 있다.
Client Side Prediction - hides latency
CMC의 가장 중요하고 필수적인 기능은 서버에서 신뢰할 수 있고 클라이언트가 예측한다는 것이다. 클라이언트 측 예측과 그것이 필요한 이유에 대해 강의가 올라올 것이다. 멀티플레이 게임을 만들려면, 기본적으로 클라이언트 측 예측이 있어야 한다. 이 기능을 직접 구현하려면 몇 달이 걸릴 수 있다.