This document is about: FUSION 2
SWITCH TO

아키텍처

이 절에서는 KCC의 다른 컴포넌트와의 관계 및 커뮤니케이션 흐름에 대해 설명합니다.


Collider

  • KCC 콜라이더는 런타임에 하위 게임 오브젝트로 생성됩니다.
  • 콜라이더 게임 객체의 레이어는 KCCSettings.ColliderLayer를 통해 제어되며, 네트워크를 통해 동기화됩니다.

Rigidbody

  • Rigidbody 컴포넌트는 KCC에 의해 요구되며 물리 엔진에 즉각적인 위치 동기화를 위해 사용됩니다.
  • Is Kinematic 플래그를 활성화해야 합니다(스폰에서 적용).

Transform

  • 트랜스폼 컴포넌트는 쓰기 전용으로 사용됩니다.
  • 위치와 회전은 스폰 중에 한 번만 읽습니다.

다음 도표는 KCC가 고 수준에서 일하는 방식을 보여줍니다:

kcc architecture
고-수준 KCC 아키텍처.

Gameplay 스크립트

  • KCC를 명령하는 사용자 스크립트로, "할 일"(특정 방향으로 이동, 위치 보기, 특정 콜라이더 무시, 점프하기, 웅크리기 등)을 나타냅니다.
  • 데이터 레이어에서 정보를 읽습니다(예: Is Grounded, Real Velocity, …)
  • 퍼블릭 API를 호출합니다(KCC.SetInputDirection(), KCC.SetLookRotation(), KCC.Jump()).
  • 상호 작용 스크립트와 상호 작용할 수 있습니다.
  • 예를 들어 입력(마우스 델타)을 KCC 액션으로 변환하는 Player 클래스(KCC.SetLookRotation()).

상호작용 스크립트

  • 사용자 스크립트(IKCCProcessor 구현), "이동하는 방법"(접지 상태에서 입력 방향 투사, 웅크린 상태에서 50% 느린 속도, 원하는 속도 계산)을 나타냅니다.
  • 로직은 코어 루프 실행 중에 간접적으로 주입됩니다.
  • 데이터 레이어에 직접 글을 쓰거나 퍼블릭 API를 호출합니다.
  • Gameplay 스크립트와 상호 운용할 수 있습니다.
  • 다른 NetworkBehaviour처럼 사용자 지정 로직을 구현할 수 있습니다.
  • 예를 들어 활성화 시 KCC 이동 속도를 5초 동안 무시하는 DashProcessor 클래스입니다.

Public API

  • KCC 실행 흐름, 특징 및 현재 상태(다른 명령어 집합 실행, 데이터 레이어에 쓰기, 안전 체크)와 호환되도록 내부에서 즉시 실행 또는 변환되는 명령어 집합을 제공합니다.
  • 복잡성을 사용자에게서 분리하여 추상화합니다.
  • 예를 들어 KCCSettings에서 Radius 속성을 설정하고 값을 즉시 콜라이더로 전파하는 KCC.SetRadius()를 사용합니다.

코어 루프

  • 물리 쿼리, 충돌 필터링, 충돌 제거, 네트워킹, 콜라이더 추적, 단계 감지, 접지 스냅, 네트워킹 등의 기본 기능을 처리합니다…
  • 데이터 레이어에서 읽기/쓰기.
  • 종속성 주입(Interaction 스크립트)을 통해 단계별 이동 제어.

다음 다이어그램은 특정 사례에 대한 위의 단순화된 애플리케이션을 보여줍니다:

kcc execution flow example
KCC 실행 흐름 예제.

PlayerGameplay 스크립트를 나타내고, Environment ProcessorTeleport ProcessorInteraction 스크립트를 나타냅니다. 실행은 다음 순서를 따릅니다:

  1. FixedUpdateNetwork()Player에서 호출됩니다
  2. Player 스크립트는 키보드나 조이스틱의 입력에 따라 사용자 지정 벡터로 KCC.SetInputDirection()을 호출합니다
  3. KCC는 원하는 입력 방향을 'KCCData.InputDirection (데이터 레이어)에 씁니다
  4. KCC에서 FixedUpdateNetwork()가 호출됩니다
  5. KCCInteraction 스크립트(KCC 프로세서)에서 이동을 위한 데이터를 계산해야 하는 지점까지 일련의 명령을 실행합니다
  6. KCC는 이 단계를 지원하는 모든 프로세서에서 PrepareData 단계를 실행합니다(이 경우 Environment Processor)
  7. 그 결과, Environment Processor는 내부적으로 입력 방향과 다른 속성을 조합하여 KCCData.DynamicVelocityKCCData.KinematicVelocity를 계산하는 다른 단계들을 실행합니다
  8. 이 시점에서 모든 단계가 실행되고, KCC는 실제 이동 로직으로 진행됩니다
  9. KCC는 모든 계산된 속도와 외부 델타를 결합하여 위치 델타 후보로 바꿉니다
  10. KCC는 콜라이더를 이전 단계에서 계산한 델타 단위로 이동시키고, 중첩된 콜라이더를 해독하여 내부 충돌 목록을 새로 고칩니다
  11. KCC는 새로 입력 및 남아있는 충돌기에 대해 OnEnter()/OnExit() 콜백을 호출합니다(이 경우 Teleport Processor => OnEnter())
  12. Teleport Processor는 목표 위치와 함께 KCC.SetPosition()을 호출합니다
  13. KCC.SetPosition()은 즉시 KCC를 지정된 위치로 텔레포트하고 KCCData.HasTeleported 플래그를 설정하여 추가 실행을 중지합니다(텔레포트 후에도 계속 이동하고 싶지 않습니다)
  14. KCC는 모든 콜백 실행 후 코어 루프 재개합니다.
  15. KCC는 조기 종료를 위해 KCCData.HasTeleported 플래그를 확인합니다(이 경우 true로 설정됨)
  16. KCC는 현재 업데이트 실행을 완료합니다(잔여 위치 델타 생략).

짐작하신 것처럼 움직임은 다양한 프로세서를 사용하여 각각의 로직을 기여/주입하여 설계할 수 있습니다. 자세한 내용은 상호작용 섹션에서 확인할 수 있습니다.

Back to top