CHAPPiE

Competition drift judging for CarX Drift Racing Online. Depth-graded line scoring against zones you author in your own map, host-controlled qualifying, live lobby scoreboard and CSV results.

Line Angle Consistency X-Factor

Download Get started Build a track View on GitHub

SDK component reference

Editor-only Unity components. Each one renames its GameObject in OnValidate to match the naming contract, and does nothing at runtime.

Install by copying UDSM_SDK/ into your track project at Assets/UDSM_SDK/. Components appear under Add Component → UDSM/….


UDSMDriftZoneSegment

One cell of a zone’s depth grid. The component you’ll use most.

Field Type Meaning
ZoneID int ≥ 0 Groups cells into one scored zone
LengthIndex int ≥ 1 Position along the zone, 1 = entry
DepthIndex int ≥ 1 Depth band, 1 = shallow. Ignored for Overshoot
Detection enum How a hit is sampled

Detection types

Value Resulting name Sampled against
Bumper zone_{Z}_{L}_{D} Full car body footprint
Wheel wheel_{Z}_{L}_{D} The 4 wheel positions
InnerClip clip_{Z}_{L}_{D} Front-left, front-centre, front-right
Overshoot overshoot_{Z}_{L} Body footprint, past the deepest band

Draws a wire mesh gizmo coloured by depth when selected: depth 1 blue, 2 cyan, 3 yellow, 4+ orange-red. Use the colour ramp to eyeball a finished zone.

No collider is required — detection uses renderer bounds. A convex MeshCollider with isTrigger = true can be added to Bumper cells for tighter body detection.


UDSMDriftZoneAngleRange

Per-zone angle window. Names the GameObject zone_angle_{ZoneID}_{Min}_{Max}.

Field Meaning
ZoneID Which zone this applies to
Min Below this for UnderAngleSustainSec → under-angle deduction
Max Upper end of the expected window

Place on its own empty GameObject. Adding it to a zone cell makes two components fight over the GameObject name and one of them loses.


UDSMSpecialLineMarker

Run-control triggers. Names the GameObject from the selected type.

Type Name Behaviour
RunStart run_start_line Stationary, 4 wheels inside → countdown → run starts
RunFinish run_finish_line Crossing during a run ends it
InitiationLine initiation_line Crossing without a drift initiated → DQ
BrakeZoneStart brake_zone_start_{Index} HUD flash
BrakeZoneEnd brake_zone_end_{Index} Clears the flash

Index only applies to the brake zones, for supporting several on one track.

Sets any MeshCollider on the object to convex = true, isTrigger = true.

run_start_line should use a BoxCollider, not a mesh collider — the mod runs an oriented-bounding-box test so a rotated box follows the track correctly.


UDSMStartLightsController

Lamp post. Renames the root to start_lights and each assigned panel renderer to panel_1 … panel_4.

Field Meaning
LightPanels 4 Renderers, assigned top to bottom
PointLights Optional Lights, same order
WhiteOn Emission colour during the countdown
RedOn Emission colour on GO
Off Emission colour when dark
GoFlashCount Flashes on GO. 0 = stay solid red
GoFlashInterval Seconds per flash half-period

Each panel needs its own material instance with Emission enabled and the _EMISSION keyword ticked. The mod writes _EmissionColor at runtime; shared materials make all four panels light together.


UDSMOffTrackMarker

Names its GameObject offtrack_{Index}. The index only keeps names unique — the mod reads the prefix.

Marks a surface as off-course. Any wheel inside the mesh counts as off-surface in addition to CarX’s per-wheel surface type, which is what makes it possible to punish running wide onto a paved run-off. Surface type alone reports asphalt there and never fires.

You don’t need these over grass, dirt or gravel — surface type already handles those. Place them where the material won’t say what the rules say.

See naming contract for placement detail and the config kill switch.


UDSMWallMarker

Names its GameObject wall_{Index}.

Drives no mod behaviour. Wall contact comes from CarX’s collision events on the car, so any solid barrier already registers taps and impact DQs. Harmless to place and useful for organising your hierarchy, but placing it does not change scoring. See naming contract.


Editor extras

UDSMDriftZoneSegmentEditor and UDSMSpecialLineMarkerEditor add scene-view labels and inspector conveniences. They live in UDSM_SDK/Editor/ and must stay in an Editor folder — Unity will refuse to build otherwise.


Versioning

The contract is additive. New names may be introduced; existing ones keep their meaning. A map authored against this reference keeps working across mod updates without a re-export.