This document is about: QUANTUM 2
SWITCH TO

이동

개요

MovementSystem은 다양한 파라미터가 있는 표면에서 다른 속도로 엔티티를 이동할 수 있는 방법을 제공합니다. MovementDesires 형태의 움직임 입력과 중력이나 점프 충격 같은 외부 힘은 맞춤형 가속도 및 마찰 기반 운동 캐릭터 컨트롤러(약칭 KCC)에 의해 처리됩니다. KCC는 물리 충돌 결과(레이 캐스트/모양 중첩)를 고려하여 이동 델타를 계산하고 그 값을 엔티티의 Transform3D에 적용합니다.

주의: FPS Template에 포함된 KCC는 완전한 맞춤형 구현이며 기본 Quantum SDK에 포함된 2D 및 3D KCC와는 다릅니다.

FSM

이동 엔진은 유한 상태 기계입니다. 지원되는 상태는 EMovementState에 구현되어 있습니다.

  • Idle: 캐릭터가 서있으며 그리고 땅 위에 있습니다. 아무런 힘이 가해져 있지 않습니다.
  • Moving: 캐릭터가 이동하며 그리고 땅 위에 있으며 입력과 외부 힘이 적용됩니다.
  • Jumping: 특수 상태로 점프 후 위로 이동할 때 캐릭터는 땅에서 떨어집니다.
  • Falling: 캐릭터가 아래로 떨어집니다(또한 점프 후 Y 가속이 0 보다 아래입니다). 캐릭터가 땅에 닿지는 않습니다.
  • Sliding: 캐릭터가 경사면에서 서있거나 움직입니다. 그리고 땅에 닿아있습니다.
  • Rising: 외부 힘에 의하여 위로 움직입니다( 점프 아님). 캐릭터가 땅에 닿아있지 않습니다.
  • Floating: 특별한 힘에 의해 움직이는 특별한 상태로 중력이 무시됩니다.

API

이동을 계산하기 위해 제공되는 API는 다음과 같습니다.

  • ResetVelocity(): 현재 이동 속도를 재설정합니다.
  • AddForce(): 다음 Update()가 호출될 때 힘을 적용합니다. 최종 델타 속도 계산은 내부 상태(표면, 기울기 등)의 영향을 받습니다. 이것은 일정 시간 동안 지속되는 힘을 가하기 위해 호출되어야 합니다.
  • AddImpulse(): 다음 Update()가 호출될 때 힘을 적용합니다. 최종 델타 속도 계산은 내부 상태(표면, 기울기 등)의 영향을 받습니다. 이것은 일회성 자극을 적용하기 위해 호출되어야 합니다.
  • AddVelocity(): 다음 Update()를 호출할 때 원시 델타 속도를 적용합니다. 이는 내부 상태(표면, 경사 등)에는 영향을 미치지 않습니다.
  • Teleport(): 특정한 위치로 순간 이동을 요청합니다. 다음 Update()가 호출될 때 실행됩니다.
  • SetFloating(): 엔티티를 Floating 상태로 전환합니다. 이 상태를 갖는 모든 기간 동안 모든 프레임에서 호출되어야 합니다.

충돌

기본적으로 KCC 이동은 엔티티 자신의 신체 부위를 무시하고 트리거 충돌기와 충돌하지 않습니다. IMovementController 인터페이스를 구현하여 사용자 지정 충돌 해결 방법을 추가할 수 있습니다.

정적 Quantum 콜라이더는 표면 속성을 가질 수 있습니다. 이러한 설정은 정적 충돌기의 Settings > User 에셋 슬롯에 연결되어야 하는 ColliderConfig 에셋에 정의됩니다.

collider config
정적 Quantum 콜라이더 구성.

실행 흐름

다음 그림은 MovementSystem의 로직 실행 흐름의 개요를 개략적으로 나타내고 있습니다.

movement
이동 계산의 실행 흐름.
Back to top