이 문서에서는 무버 샘플(Mover Examples) 플러그인의 샘플 콘텐츠를 안내하면서 무버(Mover) 시스템을 소개합니다.
무버 샘플 플러그인의 샘플 콘텐츠는 출시 제품에서 즉시 사용하도록 의도된 것이 아닙니다.
전제 조건
샘플 콘텐츠를 사용하기에 전에 무버 및 무버 샘플 플러그인을 활성화하고 프로젝트 세팅을 조정해야 합니다.
플러그인 활성화
다음 단계에 따라 무버 및 무버 샘플 플러그인을 프로젝트에서 활성화합니다.
- 편집(Edit) > 플러그인(Plugins) 을 선택하여 플러그인(Plugin) 패널을 엽니다.
- 플러그인 패널에서 검색창에 'Mover'를 입력합니다.
- 무버(Mover) 및 무버 샘플(Mover Examples) 플러그인을 활성화합니다.
- 언리얼 에디터 를 재시작합니다.
프로젝트 세팅 조정
프로젝트 세팅을 다음과 같이 조정합니다.
- 편집 > 프로젝트 세팅(Project Settings) 을 선택하여 프로젝트 세팅 패널을 엽니다.
- 프로젝트(Project) 아래에서 네트워크 예측(Network Prediction) 필터를 선택하거나 검색창을 사용하여 다음 세팅을 찾아 값을 조정합니다.
- 선호 티킹 정책(Preferred Ticking Policy) 을 고정(Fixed) 으로 설정합니다.
- 시뮬레이션된 프록시 네트워크 LOD(Simulated Proxy Network LOD) 를 보간됨(Interpolated) 으로 설정합니다.
- 고정 틱 스무딩 활성화(Enable Fixed Tick Smoothing) 를 True 로 설정합니다.
이 세팅은 일반적인 사용 시 권장됩니다. 직접 살펴보고 관련 세팅의 툴팁을 검토하는 것을 권장합니다.
샘플 콘텐츠 개요
무버 샘플 플러그인에는 레벨, 폰 등 여러 중요한 무버 학습 콘텐츠가 포함되어 있습니다.
레벨
무버 샘플 플러그인은 무버 기능을 보여주는 샘플 레벨을 다음과 같이 다양하게 제공합니다.
- L_CharacterMovementBasics: 다양한 터레인 기능, 무브먼트, 확장된 폰을 추가 무브먼트 기능과 함께 보여줍니다.
- L_PhysicsSimulatedCharacter: 피직스 기반 폰의 샘플 구현을 제공합니다. 자세한 내용은 피직스 기반 무브먼트를 참고하세요.
- L_LayeredMoves: 여러 레이어드 이동 타입을 다양한 옵션과 함께 보여줍니다.
- L_PathfindingMovement: NavWalking 모드 등 AI 기반 무브먼트 메서드와 경로 찾기를 보여줍니다.
위의 각 레벨을 비롯한 다양한 레벨은 All/Engine/Plugins/Mover Examples Content/Maps 에서 찾을 수 있습니다.
각 레벨을 열어 살펴보면 무버 기능을 보다 잘 이해할 수 있습니다. 각 레벨은 섹션으로 나뉘어 있으며, 각 영역의 용도를 설명하는 노트가 포함되어 있습니다.
폰
무버 샘플 플러그인은 무버 기능을 보여주는 다양한 샘플 폰 구현을 다음과 같이 제공합니다.
- AnimatedMannyPawn: 프로젝트 템플릿에서 사용되는 디폴트 폰과 유사하게 행동하도록 디자인되었습니다.
- AnimatedMannyPawnExtended: 디폴트 폰 구현을 대시, 다중 점프, 도약, 짚라인 타기 등 추가 무브먼트 기능으로 확장하는 샘플을 제공합니다. 확장된 폰으로 교체(Swap For Extended Pawn) 영역으로 이동하여
L_CharacterMovementBasics레벨에서 이 폰에 빙의할 수도 있습니다. - PathFollowingMannyPawn: 내비메시 무브먼트의 샘플로 AI 기반 경로를 보여줍니다.
- PhysicsMannyPawn: 네트워크 예측 대신 카오스 네트워킹된 피직스를 사용하도록 구현되었습니다. 관련 무브먼트 모드 또한 피직스 시스템의 컨스트레인트 내에서 작동하도록 커스터마이징되었습니다. 자세한 내용은 피직스 기반 무브먼트를 참고하세요.
위에서 살펴본 폰을 비롯한 다양한 폰은 All/Engine/Plugins/Mover Examples Content/Pawns 에서 찾을 수 있습니다.
샘플 폰의 무브먼트 모드 및 세팅에 더 익숙해지려면 다음 작업을 수행하세요.
- 콘텐츠 브라우저 에서 원하는 폰을 더블클릭하여 블루프린트 에디터(Blueprint Editor) 를 엽니다.
- 컴포넌트(Components) 패널에서 캐릭터 모션 컴포넌트(Character Motion Component)(MoverComponent)를 선택합니다.
- 디테일(Details) 패널에서 폰의 프로퍼티를 검토합니다. 무브먼트 모드(Movement Modes) 및 공유 세팅(Shared Settings) 프로퍼티부터 시작하는 것이 좋습니다.
레벨 플레이 시 뷰포트 왼쪽 하단에 플레이어 제어 폰의 컨트롤이 표시됩니다.
피직스 기반 무브먼트
L_PhysicsSimulatedCharacter 레벨은 네트워크 예측 플러그인 대신 카오스 네트워킹된 피직스 시스템에 의해 제어되는 PhysicsMannyPawn 을 보여줍니다.
프로젝트 세팅 조정 섹션에서의 변경사항과 더불어 프로젝트 세팅에 다음과 같은 변경사항을 적용할 수 있습니다.
- 틱 피직스 비동기화(Tick Physics Async) 를 활성화합니다.
- 네트워크 플레이의 경우 피직스 예측 활성화(Enable Physics Prediction) 를 활성화합니다.
피직스 시뮬레이션이 고정된 틱 속도로 게임 스레드보다 앞서 실행됩니다. 시뮬레이션이 진행됨에 따라 게임 스레드의 캐릭터 표현이 가장 최근의 피직스 상태를 향해 매끄럽게 보간됩니다. 하지만 플레이어 입력과 폰 이동 사이에 약간의 딜레이가 발생합니다.
추가 고려 사항
- 피직스 시스템의 캐릭터 그라운드 컨스트레인트(Character Ground Constraint) 는 무버 시스템이 생성하는 제안된 모션을 수행하는 작업을 처리합니다.
- 다른 인터랙션 가능 피직스 오브젝트에 대해 리플리케이션을 구성해야 합니다. 그렇지 않으면 서버와 클라이언트의 동기화가 해제됩니다.
- 움직이는 비피직스 오브젝트와의 인터랙션은 피직스 시뮬레이션과 나머지 게임 월드 간의 틱 차이 때문에 좋지 않은 결과로 이어집니다.
- 피직스 기반 무버 액터는 네트워크 예측을 사용하는 액터와 동기화되지 않습니다.
- 게임플레이 이벤트(Gameplay Events) 는 무버 시스템에 연결되지 않습니다.
커스터마이제이션 및 익스텐션
MovementComponent에서 무브먼트 모드 맵을 변경하여 무버 액터를 커스터마이징함으로써 월드에서 이동하는 새로운 방식을 사용할 수 있습니다. 런타임 동안 QueueNextMode 함수를 사용하거나 디폴트 캐릭터 입력 구조체 사용 시 SuggestedMovementMode 를 설정하여 이러한 모드 간에 전환할 수 있습니다. 또한 런타임 동안 모드를 추가하거나 제거할 수도 있습니다.
레벨 내에 배치된 액터의 인스턴스에서 무브먼트 모드 맵의 엘리먼트를 제거 및 대체할 때 잠재적으로 이러한 폰의 이동이 차단되는 알려진 문제가 있습니다.
디폴트 캐릭터 무브먼트 모드에는 행동 및 느낌을 다듬는 데 사용할 수 있는 다양한 세팅이 제공됩니다. 개별 세팅은 모드 자체에서 찾을 수 있으며, 여러 모드에서 공유하는 세팅은 '공유 세팅'에서 찾을 수 있습니다.
고유한 무브먼트 모드를 정의하려면 UZipliningMode 샘플을 따릅니다. 이 샘플을 따라 다음 함수를 오버라이드합니다.
OnGenerateMove: 제안된 이동을 생성합니다.OnSimulationTick: 월드에서 제안된 이동을 시뮬레이션하여 다음 상태 스냅샷을 생성합니다.
짚라인 구현은 라인을 따르는 캐릭터의 진행 상황을 트래킹하기 위해 커스텀 상태 데이터를 추가합니다. FZipliningState 는 데이터를 정의하고 UZipliningMode::OnSimulationTick 이 무브먼트 시뮬레이션 상태의 일부로 이를 추가 및 수정합니다. 커스텀 상태 데이터는 커스텀 입력 데이터와 마찬가지로 네이티브 C++ 정의를 필요로 합니다.
입력의 경우 MoverExamples의 폰은 C++ 및 블루프린트 함수의 조합을 사용하여 무브먼트 시뮬레이션을 위한 입력을 생성합니다.
이러한 폰의 일반 입력(방향 이동, 점프)은 AnimatedMannyPawnExtended 에서 찾을 수 있는 OnProduceInput 블루프린트 함수에서 작성된 추가 커스텀 입력을 사용하여 AMoverExamplesCharacter::OnProductInput 에 작성됩니다.
블루프린트에서 커스텀 입력을 생성할 수는 있지만 데이터를 직접 추가하려면 C++가 필요합니다. 이에 대한 샘플로 FMoverExampleAbilityInputs 를 따를 수 있습니다. 이 타입은 C++에서 정의되지만 블루프린트에서 시뮬레이션에 추가되고 작성됩니다.
짚라인 샘플은 UZiplineStartTransition 및 UZiplineEndTransition 에 포함된 새로운 무브먼트 메커니즘의 커스텀 트랜지션 및 모듈형 추가도 보여줍니다.