이동
이동 단계
단일 이동 단계에 대해 원하는 위치 델타를 계산하기 위해 다음 방정식을 사용합니다:
위치 델타 = (동적 속도 + 운동 속도) * 델타 시간 + 외부 델타
동적 속도
- 외력을 축적하는 속도
- 중력, 폭발 충격, 힘의 장, 점프 패드
- 경사면에서 KCC를 위로 밀어 올릴 수 있습니다
KCCData.DynamicVelocity
,KCC.SetDynamicVelocity()
운동 속도
- 사용자 입력 작업에서 계산된 비제약 속도
- 보통
KCCData.InputDirection
(입력점)을 기준으로 합니다. - 걸을 수 있는 표면만이 KCC를 위로 밀어 가파른 경사면에서 아티팩트가 발생하지 않도록 합니다.
KCCData.KinematicVelocity
,KCC.SetKinematicVelocity()
외부 델타
- 절대 위치 오프셋
- 탈침투 후 시프트 및 보정에 사용
KCCData.ExternalDelta
,KCC.SetExternalDelta()
KCC는 항상 움직이다가 겹쳐진 콜라이더를 뚫고 들어갑니다.
- ✅ 이 방법은 기하학적 구조에 자연스러운 슬라이딩을 제공합니다.
- ✅ 단일 캡슐 중복이 필요한 경우가 대부분이므로 KCC의 성능이 매우 우수합니다.
- ❌ 여러 콜라이더(대개 일부 모서리)에 대해 이동할 때 지터가 발생하는 경우가 있으며, 이는 안티-지터 기능으로 보상됩니다.
캐릭터가 너무 빨리 이동하는 경우(단일 스텝의 위치 델타가 85% 또는 반지름보다 큼), 이동이 기하학적 구조를 통과하지 않도록 하위 스텝으로 분할됩니다.
이를 CCD(Continuous Collision Detection)라고 하며 기능 섹션에서 설명하고 있습니다.
충돌 필터링
- 주 필터는 충돌 레이어 마스크로
KCCSettings.CollisionLayerMask
속성에 의해 제어되며, 물리 설정의 레이어 충돌 매트릭스는 KCC에서 사용하지 않습니다. - 자식 콜라이더는 생성 시 캐시 되며 무시됩니다. 자식 계층에 새 충돌기를 추가할 경우 수동으로
KCC.RefreshChildColliders()
를 호출해야 합니다. KCC.ResolveCollision
에 위임자를 등록하여 추가 필터링 규칙을 적용합니다.KCC.IsValidHitCollider()
를 사용하여 KCC가 현재 설정으로 충돌할 가능성이 있는지 확인합니다.KCC.SetIgnoreCollider()
로 특정 콜라이더를 명시적으로 무시할 수 있습니다. 콜라이더에는NetworkObject
컴포넌트가 있어야 합니다.