
Screenshots

Watch trailer on Steam ↗City-Racing
Anton Opic · Published by Anton Opic
Content notice: City-Racing is not only a racing game it also includes multiple weapons and shooting at Helicopters, Bomber Plane, police and shooting at random cars. You can get out of your car and shoot at objects. Including homing missiles, rockets, machinegun and more.
1 user reviews — 100% positive (1 reviews)
Last updated 11 Oct 2026
Race through vibrant urban environments against elite drivers in this high-octane street racing game. Navigate waypoint courses, use nitro boosts strategically, and compete across multiple tracks. Master your driving skills to overcome the ultimate challenge: an intense police helicopter chase.
£22.49
Lowest price we've ever recorded
View on SteamPrices can lag the live Steam store — always confirm before buying.
Price history
Action, Adventure, Indie, Racing · 2026 · More £15 - £30 games
Navigate thrilling urban courses and dodge police chases in City-Racing. Master your skills as you race against top drivers and explore vibrant city environments, all crafted by Anton Opic.
About this game
City-Racing is an exhilarating high-speed racing experience set in vibrant urban environments. Developed by a passionate father-son team, this Early Access title delivers the thrill of competitive street racing combined with intense police chases.
Key Features
• Dynamic Racing Action: Compete against 10 skilled AI drivers across multiple challenging courses
• Stunning Visuals: Experience realistic urban environments powered by Unity's High Definition Render Pipeline
• Intuitive Controls: Master your vehicle with responsive driving mechanics suitable for both casual and experienced racing enthusiasts
• Strategic Nitro System: Use your boost wisely to gain the competitive edge in crucial race moments
• Waypoint Navigation: Follow the dynamic arrow system to guide you through complex urban tracks
• Multiple Game Modes:
• Traditional racing circuits
• Scene selection for your favorite tracks
• Epic police and helicopter chases that test your ultimate driving skills
Technical Details
• Graphics Engine: Built using Unity's HDRP for photorealistic visuals
• Physics System: Realistic car handling and collision dynamics
• Day/Night Cycle: Experience races in different lighting conditions
• Controller Support: Full gamepad compatibility with customizable controls
• Customizable Options: Adjust graphics, audio, and gameplay settings to your preference
Early Access Journey
City-Racing is being actively developed by Anton and Tony Opic, a father and son with a shared dream of creating amazing multiplayer HDRP racing games. During Early Access, we're dedicated to implementing player feedback to deliver the best racing experience possible.
Join us on this exciting journey as we continue to add new features, vehicles, and race environments. Your support fuels our passion to create the ultimate urban racing game.
May the speed be with you!
System Requirements
Will my PC run this? →Minimum
- OS: Windows 10
- Processor: Intel Core I7-9750H 2.60GHz 6 Cores
- Memory: 16 GB RAM
- Graphics: NVIDIA GeForce RTX 2060
- DirectX: Version 11
- Storage: 25 GB available space
- Additional Notes: Requires a 64-bit processor and operating system
Recommended
- OS: Windows 11
- Processor: Intel Core Ultra 9 275HX processor
- Memory: 32 GB RAM
- Graphics: NVIDIA® GeForce RTX™ 4090 Laptop GPU
- DirectX: Version 12
- Storage: 25 GB available space
- Additional Notes: Requires a 64-bit processor and operating system
Supported Languages
*languages with full audio support
Latest news
AnnouncementsOfficial
Cars that crashed off the edge of the map at high speed would fall forever
Fixed:Cars that crashed off the edge of the map at high speed would fall forever — they now automatically reset back to the last checkpoint you passed.Fixed a bug where a crashed car resting on its side or upside-down could get stuck with the camera flickering/glitching instead of recovering. Flipped cars now reliably right themselves and return to the track within a few seconds.Fixed a potential build-stability issue in the city traffic system that could have caused compile failures in future builds.Technical changelog (for you)Player recovery system (CRCarInfo.cs)New: player car falling below the map (YRead full article on Community Announcements (LesGo)Patch NotesOfficial
Repair Stations
added more repair stations around all the race tracks, also re-posisioned the other stations, to the waypoint path for the AI Cars. Like the long race track also of AI cars would get damaged and not make it to the next repair station, so I added more stations aroound all the race tracks.Read full article on Community Announcements (LesGo)AnnouncementsOfficial
Now we also needed to tighten the IsCarAhead
Looking at the current implementation, awareness has two problems that cause clumping:1.The "in-path" test is too wide — a 35° forward cone within 35 m means any traffic car roughly in front (even one or two lanes over) triggers a slow-down. So, when a pack of city cars is around, the AI brakes for cars it could just drive past.2.The cap fires even when there's a clearly open overtake lane — so the AI matches the slow car's speed (~36 km/h) instead of swinging into the free lane and blasting past.Fix: tighten the geometry to "in my lane" only, and don't apply the speed cap if an adjacent lane is open (let the lane-selection logic do the dodging instead). I'll also raise the default headroom, so the AI keeps enough momentum to actually pass.Now we rewrite ScanForTrafficCars to (1) only consider cars in our actual lane (lateral check), and (2) skip the speed cap if there's a free adjacent lane. Also we tighten IsCarAhead's TrafficCar add-on so it doesn't over-trigger every frame.Now we also needed to tighten the IsCarAhead traffic-car add-on so it only triggers when the car is genuinely close-in-lane (not a 60° cone for any TrafficCar within 0.6 * laneWidth of the lane center which over-fires): What was wrong1.The old "in path" test was a 35° forward cone within 35 m, so the AI saw traffic cars one or two lanes over and treated them as obstacles → constant brake.2.Even when a clear overtake lane existed, the speed cap still fired (otherSpeedKmh + 6 km/h), so the AI matched the slow city car's speed (~36 km/h) instead of swinging around → the clumping you described.3.IsCarAhead's TrafficCar add-on also used a 60° cone, so every lane-selection tick the AI thought it had a car ahead.Fix (in CRAILearningSystem.cs)ScanForTrafficCars was rewritten with two key rules:·Lane-tight geometry: a traffic car only counts as "in my lane" if its lateral offset (using Vector3.Dot(myRight, toOther)) is within ±laneWidth/2 AND forward distance is within trafficFollowDistance (now 9 m,...Read full article on Community Announcements (LesGo)AnnouncementsOfficial
added a real lane‑offset field and use it when building the per‑car waypoints
Let me explain the issue clearly:Why the cars still drive in the center: The field perfectCenteringDistance is not a lane offset — it's just the tolerance the learning system uses to score whether a pass through a waypoint counts as "perfect" (within X meters of the waypoint). Setting it to 5 just makes the scorer more forgiving; it doesn't move the car off the road centerline.The AI follows whatever positions are stored in the per-car waypoints container, and CreatePerCarWaypointsContainer() clones waypoints with src.transform.position — i.e., dead center of the road. To put cars in the right lane I need to add a real lane offset that shifts each cloned waypoint perpendicular to the road direction.TrafficCar interaction: The methods tc.GetSpeed() / tc.IsHazard() exist and the scan logic is fine. The reason it can look "broken" today is that AI cars are driving on the centerline, so they sit on top of TrafficCars (overlapping/clipping) instead of approaching them in a forward cone — ScanForTrafficCars requires the traffic car to be ahead within a forward cone, so head‑on/centerline overlap makes the awareness misfire. Fixing the lane offset fixes the awareness too.I added a real lane‑offset field and use it when building the per‑car waypoints, and add a clarifying tooltip on perfectCenteringDistance so it isn't confused for a steering offset.No errors. Here's a summary of the fix:What was wrong·perfectCenteringDistance is a scoring tolerance for the learning system (how many meters from the waypoint counts as a "perfect" pass). It never fed into steering, so changing it from 3 → 5 didn't move the car off the centerline.·CreatePerCarWaypointsContainer() cloned each waypoint at src.transform.position — i.e., the road centerline — so the AI dutifully chased the centerline.·The TrafficCar awareness (ScanForTrafficCars → tc.GetSpeed()/tc.IsHazard()) is wired up correctly. Its forward‑cone test was just being undermined by the AI sitting on top of TrafficCars on the cente...Read full article on Community Announcements (LesGo)AnnouncementsOfficial
breakdown of the three big upgrades
🏎️ Recap: What We Just Did to CRAILearningSystem.csHere's a breakdown of the three big upgrades and why each one makes the AI noticeably better.---1. 🗑️ Killed the global minWaypointSpeed / maxWaypointSpeedBefore: Every car on every track was hard-clamped between two magic numbers (e.g. 30–250 km/h) in the inspector. A Formula car and a city sedan got the same ceiling, and a tight roundabout had the same floor as a freeway.After: Bounds are derived per-waypoint from baseSpeed (the designer-tuned value cloned into the per-car / dynamic container):·Sharp corners: ceiling shrinks toward 0.85 × baseSpeed·Straights: ceiling opens up to 1.4 × baseSpeed·Floor: 0.4 × baseSpeedWhy it's better: The dynamic per-car waypoints are now the single source of truth for "how fast is reasonable here." No more babysitting two sliders per scene/car combo, and a hairpin literally can't be clamped at the same number as the back straight.---2. 🧠 Predictive Backward Braking — the actual cornering fixThis is the big one. The complaint was "cars at 100 mph just plow to the middle of the road and never make the turn." That happens because the AI was only braking at the corner, not before it.New method: PropagateCornerBrakingBackward(currentWP) — runs every frame after ApplyLearnedSpeedsAhead().It walks cornerLookAhead waypoints out (default 8) and, for every adjacent pair, enforces a physical braking budget:prevWP.targetSpeed ≤ aheadWP.targetSpeed + (distance × maxBrakingPerMeter)…and sharper corners shrink that per-meter budget, so steeper turns force earlier brake points.Crucially, the lower ceiling is written back into learningData\.optimalSpeed — so the car remembers the new brake point next lap instead of re-discovering it by overshooting again.Why it's better:·A 90° corner learned at 50 km/h now automatically drags the previous 1–8 waypoints down to a deceleration curve the car can physically achieve.·High-speed cars finally make the turn instead of understeering across the centerline.·I...Read full article on Community Announcements (LesGo)






