Arcade Drift Vehicle System
After trying to use Unreal’s default vehicle system without luck I’ve made my own and it should be available on the marketplace soon (hopefully).
Racing game demo
Suspension system quick demo
So what is it?
- A simple and flexible vehicle system for Arcade like driving games.
- Fast and easy to setup. Quickly add new vehicles, no complex materials or physics stuff to tweak for hours, just the needed parameters.
- A Racing Game template (or a big Blueprint Tutorial)
The vehicle system
- Core logic in C++
- Physics based with ray casts suspension system
- Drifting / Jumping Mechanics
- Animation blueprint ready (wheels rotation, orientation and drifting)
- Blueprint friendly, all state/data exposed, Blueprint implementable events for all state changes (DriftStart/End, BrakeStart/End, ReadyToDrift etc…)
- Fully configurable
- Debug tools (lot of info in ShowDebug command and a custom visualizer class to show suspensions, forces etc…)
- Custom vehicle Kart Vehicle Blueprint with animations and VFXs
The racing game template
- 100% Blueprint
- UI Game HUD, Main Menu, Pause Menu with Resume and Restart Options. Result Menu. All UI supports Gamepad control
- Intro Cinematic with gameplay transition
- Checkpoint and lap logic, timers
- Custom assets with material animations.
As a Mario Kart / oldschool racing game fan, I’ve found that getting something that feels right is actually super tricky. Getting the right amount of acceleration, adherence, turning angles, suspension feel as well as the right track/vehicle size ratio is really not easy.
I’ve tried to make this system easily configurable by getting the minimum possible number of settings while decoupling them as much as possible from one another. This means that wanting a slighly faster car does not mean spending 3 days tweaking a ton of settings and debalancing the whole game.
Right now I’m still working on cleaning up the code, fine tuning everything and improving the assets (I know the lighting sucks in the video…). If there’s anything that you see missing or would have wanted to see in this kind of system do not hesitate and tell me!
Also if you have any implementation related question, feel free to ask, I’ve spend -way too- much time on this and I’d be happy to share what I’ve leaned