The execution order of the KCC's internal logic is important to take into account when extending it.
Simplified Execution Order
KCC.SetInputDirection(): called from a player controller code before KCC internal update.
KCC.SetLookRotation(): called from a player controller code before KCC internal update
- Another KCC API calls setting "input" properties
- KCC internal update
- Pre-caching KCC processors
IKCCProcessor.SetInputProperties(): Dedicated stage to set input properties (ground angle, base position, gravity, ...).
IKCCProcessor.SetDynamicVelocity():Dedicated stage to calculate KCCData.DynamicVelocity.
IKCCProcessor.SetKinematicDirection(): Dedicated stage to calculate KCCData.KinematicDirection.
IKCCProcessor.SetKinematicTangent(): Dedicated stage to calculate KCCData.KinematicTangent.
IKCCProcessor.SetKinematicSpeed(): Dedicated stage to calculate KCCData.KinematicSpeed.
IKCCProcessor.SetKinematicVelocity(): Dedicated stage to calculate KCCData.KinematicVelocity (combining Kinematic properties calculated in previous stages).
- Movement with calculated velocities. This step can be executed multiple times in a row if the desired velocity is too big (CCD is applied).
- Physics query.
IKCCProcessor.ProcessPhysicsQuery(): Dedicated stage to calculate properties after single physics query (for example kinematic velocity ground projection).
- Collision update:
IKCCProcessor.Stay(): Dedicated stage to execute custom processor logic.
- Transform synchronization.
For more info about processors and their stages, please check commented code and KCC sample project.