아키텍처
이 절에서는 KCC의 다른 컴포넌트와의 관계 및 커뮤니케이션 흐름에 대해 설명합니다.
Collider
- KCC 콜라이더는 런타임에 하위 게임 오브젝트로 생성됩니다.
- 콜라이더 게임 객체의 레이어는
KCCSettings.ColliderLayer
를 통해 제어되며, 네트워크를 통해 동기화됩니다.
Rigidbody
Rigidbody
컴포넌트는KCC
에 의해 요구되며 물리 엔진에 즉각적인 위치 동기화를 위해 사용됩니다.Is Kinematic
플래그를 활성화해야 합니다(스폰에서 적용).
Transform
- 트랜스폼 컴포넌트는 쓰기 전용으로 사용됩니다.
- 위치와 회전은 스폰 중에 한 번만 읽습니다.
다음 도표는 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 스크립트)을 통해 단계별 이동 제어.
다음 다이어그램은 특정 사례에 대한 위의 단순화된 애플리케이션을 보여줍니다:
Player
는 Gameplay 스크립트를 나타내고, Environment Processor
와 Teleport Processor
는 Interaction 스크립트를 나타냅니다. 실행은 다음 순서를 따릅니다:
FixedUpdateNetwork()
가Player
에서 호출됩니다Player
스크립트는 키보드나 조이스틱의 입력에 따라 사용자 지정 벡터로KCC.SetInputDirection()
을 호출합니다KCC
는 원하는 입력 방향을 'KCCData.InputDirection
(데이터 레이어)에 씁니다KCC
에서FixedUpdateNetwork()
가 호출됩니다KCC
는 Interaction 스크립트(KCC 프로세서)에서 이동을 위한 데이터를 계산해야 하는 지점까지 일련의 명령을 실행합니다KCC
는 이 단계를 지원하는 모든 프로세서에서PrepareData
단계를 실행합니다(이 경우Environment Processor
)- 그 결과,
Environment Processor
는 내부적으로 입력 방향과 다른 속성을 조합하여KCCData.DynamicVelocity
와KCCData.KinematicVelocity
를 계산하는 다른 단계들을 실행합니다 - 이 시점에서 모든 단계가 실행되고,
KCC
는 실제 이동 로직으로 진행됩니다 KCC
는 모든 계산된 속도와 외부 델타를 결합하여 위치 델타 후보로 바꿉니다KCC
는 콜라이더를 이전 단계에서 계산한 델타 단위로 이동시키고, 중첩된 콜라이더를 해독하여 내부 충돌 목록을 새로 고칩니다KCC
는 새로 입력 및 남아있는 충돌기에 대해OnEnter()
/OnExit()
콜백을 호출합니다(이 경우Teleport Processor
=>OnEnter()
)Teleport Processor
는 목표 위치와 함께KCC.SetPosition()
을 호출합니다KCC.SetPosition()
은 즉시KCC
를 지정된 위치로 텔레포트하고KCCData.HasTeleported
플래그를 설정하여 추가 실행을 중지합니다(텔레포트 후에도 계속 이동하고 싶지 않습니다)KCC
는 모든 콜백 실행 후 코어 루프 재개합니다.KCC
는 조기 종료를 위해KCCData.HasTeleported
플래그를 확인합니다(이 경우 true로 설정됨)KCC
는 현재 업데이트 실행을 완료합니다(잔여 위치 델타 생략).
짐작하신 것처럼 움직임은 다양한 프로세서를 사용하여 각각의 로직을 기여/주입하여 설계할 수 있습니다. 자세한 내용은 상호작용 섹션에서 확인할 수 있습니다.
Back to top