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:

  1. Calculates how compressed the suspension is (rest position vs current position).
  2. Applies a spring force pushing the wheel back to rest position.
  3. Applies a damper force opposing rapid spring motion.
  4. Computes the slip — the difference between the wheel's spinning velocity and the surface's velocity beneath it.
  5. 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:

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

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:

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:

The defaults are set by the controller's WheelType:

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

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:

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:

Next Steps