How WheelColliders Work
The WheelCollider is the most important component in vehicle physics — it's what decides how the wheel grips the road, when it slips, how the suspension absorbs bumps, and how brake / throttle force gets converted into motion. This document explains how Unity's built-in WheelCollider works, what RCC's RCC_WheelCollider adds on top, and how to tune friction so your vehicle drives the way you want.
You don't need to be a physics expert to follow this. By the end, you'll understand the friction curve diagram, the difference between forward and sideways friction, and what each tuning value does.
What a Unity WheelCollider Is
Unity's WheelCollider is a special collider that simulates a wheel using a raycast-based suspension model. Each frame, the wheel casts a ray down from its mounting point and looks for the ground. When it finds the ground, it:
- Calculates how compressed the suspension is (rest position vs current position).
- Applies a spring force pushing the wheel back to rest position.
- Applies a damper force opposing rapid spring motion.
- Computes the slip — the difference between the wheel's spinning velocity and the surface's velocity beneath it.
- Applies friction force based on slip, using a friction curve (more on this below).
This model is faster and more stable than full mesh-based wheel simulation. The cost is that you can't simulate things like a wheel deforming or a wheel digging into soft ground — for that, you'd need a more advanced wheel system.
Every WheelCollider has these key serialized fields:
- Mass — the wheel's mass (not the whole vehicle's).
- Radius — wheel radius in meters.
- Wheel Damping Rate — internal wheel rotation damping.
- Suspension Distance — how far the wheel can travel from rest position.
- Suspension Spring — spring stiffness, damper, and target position.
- Forward Friction — friction curve for acceleration / braking direction.
- Sideways Friction — friction curve for the steer direction.
The Friction Curve
The most important concept. A friction curve is a graph with slip on the X axis and force on the Y axis. It's defined by four points:
Force ↑
│ ╭─── extremum (peak grip)
│ ╱
│ ╱
│ ╱ ╲
│ ╱ ╲___ asymptote (steady slip)
│ ╱
│ ╱
│╱
└──────────────────→ Slip
0 → extremumSlip → asymptoteSlip
- Extremum Slip — the slip value at which grip peaks.
- Extremum Value — the maximum force the tire can apply at peak slip.
- Asymptote Slip — the slip value at which the tire has fully broken loose.
- Asymptote Value — the residual force when the tire is sliding freely.
In plain language: as the wheel starts to slip, grip increases. Past the extremum, grip starts to fall off — this is the tire "breaking loose." At the asymptote, the tire is sliding freely and offers only residual friction.
Each WheelCollider has two of these curves: one for forward direction (acceleration/braking) and one for sideways (steering). They are independent — a tire can grip well sideways but slip forward (a burnout) or grip well forward but slip sideways (an understeer slide).
Stiffness
Each friction curve also has a stiffness multiplier. Stiffness scales the entire curve. Higher stiffness = more grip across all slip values; lower stiffness = less grip (think wet road, ice).
RCC uses stiffness as the per-surface mechanism: an asphalt PhysicMaterial might have stiffness 1.0, while ice has 0.3. The shape of the curve stays the same; the magnitude scales.
What RCC_WheelCollider Adds
RCC_WheelCollider sits on the same GameObject as a Unity WheelCollider and adds:
Ground Material Detection
Each frame, the component reads the hit collider's PhysicMaterial and looks it up in RCC_GroundMaterials.asset. The matched entry provides:
forwardStiffnessandsidewaysStiffnessmultipliers (applied to the friction curves).slipbaseline.damp(suspension damper override).volumefor ground audio.- A particle prefab for dust / dirt / snow.
- An audio clip for the surface.
- An optional custom skidmark style.
This is how you get different driving feel on different surfaces without writing a single line of code — just paint different materials onto your environment colliders.
For Unity Terrain, the lookup is different: RCC_WheelCollider reads the splatmap layer index at the wheel's position and matches that to a TerrainFrictions entry. See 11 — Ground Physics for details.
Friction Curve from Behavior Preset
When the active behavior preset's applyExternalWheelFrictions is on, RCC_WheelCollider ignores the values stored on the Unity WheelCollider and instead reads them from the preset. This means switching from Simulator → Drift → Arcade with one call (RCC.SetBehavior(1)) changes every wheel's friction live.
When the preset doesn't override, RCC_WheelCollider uses the values currently on the Unity WheelCollider — so you can still hand-tune individual wheels.
Audio
The wheel plays a slip / skid sound when its slip exceeds a threshold. Volume scales with slip magnitude. The ground material's volume multiplier and groundSound clip override the default audio. This is what makes asphalt squeals different from gravel rumbles.
Particle Effects
When slipping on a surface that has a groundParticles prefab, the wheel emits dust / dirt / snow particles. The emission rate scales with slip.
Skidmarks
When forward or sideways slip exceeds the skidmark threshold, the wheel writes to the scene's RCC_SkidmarksManager, which draws a mesh strip on the ground. Skidmarks pool — they don't allocate per frame.
Tire Deflation
If the wheel takes enough damage (collision, sharp object, ground with deflate = true), the tire deflates. Deflated tires have reduced friction stiffness and slightly smaller radius. Repair via RCC.Repair(carController).
Anti-Roll Bar Force
Each wheel knows its sibling on the same axle (FL knows FR, RL knows RR). Each frame, the wheels compute their suspension compression difference and apply a counteracting force — the anti-roll bar effect. This reduces body roll in turns. Tune via antiRollFrontHorizontal and antiRollRearHorizontal on RCC_CarControllerV4.
Power / Brake / Steer / Handbrake Flags
Each wheel has four toggles:
- Is Power Wheel — receives engine torque.
- Is Brake Wheel — receives brake torque.
- Is Steer Wheel — turns with steering input.
- Is Hand Brake Wheel — receives handbrake torque.
The defaults are set by the controller's WheelType:
- FWD → front wheels are powered + steered + braked; rear are braked + handbrake.
- RWD → rear wheels are powered + braked; front are steered + braked.
- AWD → all four are powered + braked; front are steered.
You can override any of these for unusual setups (e.g., a rear-steer forklift, or a front-handbrake hill climber).
Tuning Friction for Different Driving Feels
Goal: Realistic Simulator
You want grip that's predictable, breaks loose gradually, and recovers when the player eases off.
Forward extremum slip: 0.4
Forward extremum value: 1.0
Forward asymptote slip: 0.8
Forward asymptote value: 0.5
Forward stiffness: 1.0
Sideways extremum slip: 0.2
Sideways extremum value: 1.0
Sideways asymptote slip: 0.5
Sideways asymptote value: 0.75
Sideways stiffness: 1.0
This is roughly the default Simulator preset.
Goal: Drift
You want sideways grip to break loose early and stay loose long enough to slide.
Sideways extremum slip: 0.3 (slip earlier)
Sideways extremum value: 1.0
Sideways asymptote slip: 1.0 (long slip range)
Sideways asymptote value: 0.5 (low residual grip when sliding)
Sideways stiffness: 1.5 (high overall grip until break)
The car snaps into a slide when you provoke it (handbrake + throttle), then holds the slide while the player counter-steers. Forward grip stays normal so the engine can power through the slide.
Goal: Arcade
You want lots of grip, predictable turn-in, no spin-outs.
Sideways extremum slip: 0.2
Sideways extremum value: 1.0
Sideways asymptote slip: 0.5
Sideways asymptote value: 1.0 (high residual — never fully loses grip)
Sideways stiffness: 1.5
The car turns sharply and never spins. Easier for the player to control without ever feeling truly fast.
Goal: Off-Road / Loose Surface
Reduce stiffness across all surfaces. Use the per-surface ground material entries to give grass, dirt, and sand low stiffness values (e.g., 0.4) compared to asphalt (1.0).
The Suspension Spring
Aside from friction, the other big tuning lever is suspension stiffness.
Suspension Spring
- Spring — how strong the spring is. Higher = stiffer suspension, less body roll, but worse bump absorption. Default 45000.
- Damper — damping force opposing rapid spring motion. Higher = less bouncy. Default 2500.
- Target Position — where the wheel "wants" to be in its travel range. 0 = bottomed out, 1 = fully extended. Default 0.5 (middle).
Stiffer springs make a car feel "race car" — it grips well in turns but rattles on bumps. Softer springs make it feel "comfort car" — it rides bumps well but rolls more.
Suspension Distance
How far the wheel can travel. Default 0.2 m (20 cm) for a road car. For an off-road truck, 0.4 m. For a Formula 1 car, 0.05 m.
Common Friction Problems
Wheels Spin Forever / Burn Out Constantly
Forward stiffness is too low, or forward friction extremum value is too low. The tire can't grip enough to convert engine torque into motion.
Fix: Increase forward stiffness or forward extremum value. Or reduce maxEngineTorque if the engine is over-torqued for the tire grip.
Car Won't Turn — Just Pushes Forward (Understeer)
Sideways grip on the front wheels is too weak relative to the rear.
Fix: Increase front sideways stiffness. Or decrease rear sideways stiffness. Or in the active behavior preset, increase sidewaysExtremumValue.
Tail Constantly Swings Out (Oversteer)
Sideways grip on the rear is too weak relative to the front.
Fix: Increase rear sideways stiffness. Or move COM forward (so weight is on the front wheels). Or reduce maxEngineTorque for RWD cars — too much rear torque overpowers rear grip.
Car Slides Down Hills at Rest
The wheel's WheelDampingRate is too low, or the brake torque doesn't fully hold the wheel.
Fix: Increase Wheel Damping Rate to ~3. Make sure the parking brake (handbrake at rest) is applying full brake torque.
Car Bounces on Bumps
Damper is too low relative to spring. The suspension oscillates because nothing absorbs the energy.
Fix: Increase the damper value. As a rough rule, damper should be 1/15 to 1/30 of spring (e.g., spring 45000 → damper 1500–3000).
Wheels Visibly Sink Into Geometry
The visible wheel mesh isn't following the wheel collider's pose correctly. Usually this means the wheel mesh's pivot isn't at the wheel center.
Fix: Re-position the wheel mesh transform so its pivot is at the wheel's center axis. Or run Tools → BoneCracker Games → Realistic Car Controller → Check Axis Orientation.
How to Read the Inspector Friction Values
When you click a RCC_WheelCollider in the Inspector, you'll see:
- Wheel Model — the visible wheel mesh transform.
- Wheel Type — auto-set from the parent controller's
WheelType. - Is Power Wheel / Is Brake Wheel / Is Steer Wheel / Is Hand Brake Wheel — booleans.
- Camber — wheel tilt (only relevant if customization is on).
- Cant / Toe / Caster — alignment values.
- Forward Friction / Sideways Friction — friction curves.
- Skidmarks — toggle and threshold.
- Audio — slip sound clip.
The friction curves can be edited inline. Click the curve preview to open Unity's animation curve editor.
Performance Note
Each WheelCollider raycast is fast but not free. A typical vehicle has 4 WheelColliders. Multiple AI vehicles add up: 20 AI cars × 4 wheels = 80 WheelColliders per frame.
If you're targeting low-end mobile and seeing frame drops with many AI:
- Reduce the number of active AI vehicles.
- Use the
RCC_LODcomponent to disable wheel updates on far-away vehicles. - Turn
useFixedWheelColliderstofalseinRCC_Settingsto use less-stable but faster wheel colliders. - Reduce the number of skidmarks (
maxMarkson the skidmarks manager).
Next Steps
- 10 — Behavior Presets — switching friction profiles in bulk.
- 11 — Ground Physics — per-surface stiffness configuration.
- 08 — Vehicle Inspector Reference — the full controller field reference.