@kingofnova Thanks for the feedback man! About the question you asked:
First of all the car has different friction on different sides so Unity Rigidbody 2D friction is going out the window. I decided to create my own friction for the car. It took in the local car velocity on the x and y axis and subtracted a value from them proportional to the axis velocity.
After that I did the forward and backward motion. That one was pretty simple. I just accelerated the car by some number. It wouldn't accelerate forever as the number was constant and the friction grew in proportion to the velocity. This way the car would slowly stop accelerating when coming close to some speed(just like in real life). I just messed with the acceleration until it looked right.
The next thing was turning. What I decided to do was define a maximum angular velocity which would scale with your velocity. Of course it couldn't just scale with the velocity magnitude. That would let the car turn while moving sideways. What I ended up doing is multiplying the local speed vector by two variables. One would control how fast the car would turn depending on how fast it is travelling on the local x-axis and the other to do the same for the y-axis. I would then get the magnitude of that vector and use that to scale the maximum angular velocity.
Then to reach that maximum velocity I simply accelerated towards it using an acceleration variable which would scale using the same magnitude I used to scale the maximum velocity.
For the friction on the angular velocity I used the unity standard Rigidbody 2D angular friction.
Anyway, not the most elegant solution but it works. I've noticed some issues like how the sideways velocity should slowly transition into forward velocity if you're at an angle. Will implement that into the friction when I have time.