Work in Progress of a steam train.

Diameter x pi is your circumference, and the distance the wheel will travel to make a full rotation.

All the wheels, I assume, are moving in unison, so you could just use the trains position to calculate the rotation and apply it on update.

In a pseudo attempt here,

currentPosition - lastPosition = distTraveled

(distTraveled / circumference) * 360 = addRotation

At the end up Update, add addRotation to each wheel, then store the trains currentPosition and the currentRotation.

I'm having a hard time making sense from my phone but I hope it helps? If I can get home to test this I'll share if it works.

Could also have a threshold or a state for atMaxSpeed so once the train is done accelerating the wheels just maintain a rotational velocity without calculating anything. Same for. If it's at rest.

/r/Unity3D Thread Parent Link - gfycat.com