Car wheel problems

Hello,

At the moment i am trying to get a car working in Unity with tutorials. After following the tutorial some problems popped up:

How it looks in Unity:

How it looks when i hit play:

As you can see the wheels are flipped and become oval…
The controls are flipped as well.

Carscript:

// These variables allow the script to power the wheels of the car.
var FrontLeftWheel : WheelCollider;
var FrontRightWheel : WheelCollider;

// These variables are for the gears, the array is the list of ratios. The script
// uses the defined gear ratios to determine how much torque to apply to the wheels.
var GearRatio : float[];
var CurrentGear : int = 0;

// These variables are just for applying torque to the wheels and shifting gears.
// using the defined Max and Min Engine RPM, the script can determine what gear the
// car needs to be in.
var EngineTorque : float = 230.0;
var MaxEngineRPM : float = 3000.0;
var MinEngineRPM : float = 1000.0;
private var EngineRPM : float = 0.0;



function Start () {
	// I usually alter the center of mass to make the car more stable. I'ts less likely to flip this way.
rigidbody.centerOfMass += Vector3(0, -.75, .25);
    }

function Update () {
	
		// Compute the engine RPM based on the average RPM of the two wheels, then call the shift gear function
	EngineRPM = (FrontLeftWheel.rpm + FrontRightWheel.rpm)/2 * GearRatio[CurrentGear];
	ShiftGears();

	// set the audio pitch to the percentage of RPM to the maximum RPM plus one, this makes the sound play
	// up to twice it's pitch, where it will suddenly drop when it switches gears.
	audio.pitch = Mathf.Abs(EngineRPM / MaxEngineRPM) + 1.0 ;
	// this line is just to ensure that the pitch does not reach a value higher than is desired.
	if ( audio.pitch > 2.0 ) {
		audio.pitch = 2.0;
	}

	// finally, apply the values to the wheels.	The torque applied is divided by the current gear, and
	// multiplied by the user input variable.
	FrontLeftWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
	FrontRightWheel.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical");
		
	// the steer angle is an arbitrary value multiplied by the user input.
	FrontLeftWheel.steerAngle = 10 * Input.GetAxis("Horizontal");
	FrontRightWheel.steerAngle = 10 * Input.GetAxis("Horizontal");
}

function ShiftGears() {
	// this funciton shifts the gears of the vehcile, it loops through all the gears, checking which will make
	// the engine RPM fall within the desired range. The gear is then set to this "appropriate" value.
	if ( EngineRPM >= MaxEngineRPM ) {
		var AppropriateGear : int = CurrentGear;
		
		for ( var i = 0; i < GearRatio.length; i ++ ) {
			if ( FrontLeftWheel.rpm * GearRatio *< MaxEngineRPM ) {*
  •  		AppropriateGear = i;*
    
  •  		break;*
    
  •  	}*
    
  •  }*
    
  •  CurrentGear = AppropriateGear;*
    
  • }*

  • if ( EngineRPM <= MinEngineRPM ) {*

  •  AppropriateGear = CurrentGear;*
    
  •  for ( var j = GearRatio.length-1; j >= 0; j -- ) {*
    

_ if ( FrontLeftWheel.rpm * GearRatio[j] > MinEngineRPM ) {_

  •  		AppropriateGear = j;*
    
  •  		break;*
    
  •  	}*
    
  •  }*
    
  •  CurrentGear = AppropriateGear;*
    
  • }*
    }
    Wheel allignment script:
    // Define the variables used in the script, the Corresponding collider is the wheel collider at the position of
    // the visible wheel, the slip prefab is the prefab instantiated when the wheels slide, the rotation value is the
    // value used to rotate the wheel around it’s axel.
    var CorrespondingCollider : WheelCollider;
    var SlipPrefab : GameObject;
    public var RotationValue : float = 0.0;

function Update () {

  • // define a hit point for the raycast collision*

  • var hit : RaycastHit;*

  • // Find the collider’s center point, you need to do this because the center of the collider might not actually be*

  • // the real position if the transform’s off.*

  • var ColliderCenterPoint : Vector3 = CorrespondingCollider.transform.TransformPoint( CorrespondingCollider.center );*

  • // now cast a ray out from the wheel collider’s center the distance of the suspension, if it hit something, then use the “hit”*

  • // variable’s data to find where the wheel hit, if it didn’t, then se tthe wheel to be fully extended along the suspension.*

  • if ( Physics.Raycast( ColliderCenterPoint, -CorrespondingCollider.transform.up, hit, CorrespondingCollider.suspensionDistance + CorrespondingCollider.radius ) ) {*
    _ transform.position = hit.point + (CorrespondingCollider.transform.up * CorrespondingCollider.radius);_

  • }else{*
    _ transform.position = ColliderCenterPoint - (CorrespondingCollider.transform.up * CorrespondingCollider.suspensionDistance);_

  • }*

  • // now set the wheel rotation to the rotation of the collider combined with a new rotation value. This new value*

  • // is the rotation around the axle, and the rotation from steering input.*
    _ transform.rotation = CorrespondingCollider.transform.rotation * Quaternion.Euler( RotationValue, CorrespondingCollider.steerAngle, 0);_

  • // increase the rotation value by the rotation speed (in degrees per second)*
    _ RotationValue += CorrespondingCollider.rpm * ( 360/60 ) * Time.deltaTime;_

  • // define a wheelhit object, this stores all of the data from the wheel collider and will allow us to determine*

  • // the slip of the tire.*

  • var CorrespondingGroundHit : WheelHit;*

  • CorrespondingCollider.GetGroundHit( CorrespondingGroundHit );*

  • // if the slip of the tire is greater than 2.0, and the slip prefab exists, create an instance of it on the ground at*

  • // a zero rotation.*

  • if ( Mathf.Abs( CorrespondingGroundHit.sidewaysSlip ) > 1.5 ) {*

  •  if ( SlipPrefab ) {*
    
  •  	Instantiate( SlipPrefab, CorrespondingGroundHit.point, Quaternion.identity );*
    
  •  }*
    
  • }*

}
I have been searching for a few days now but can’t get it to work…
Does anybody know the problems or know how to fix them?
Thanks in advance,
Mike

Donno if you figured your problem out ever, but I had to troubleshoot a similar issue with my car game.

Your problem is in your ‘Wheel Align’ script probably. If you’re using code from the same tutorials I did, you will need to mess with a line that looks like this in the Wheel Align script-- (this is the final code that worked for me):

transform.rotation = CorrespondingCollider.transform.rotation * Quaternion.Euler( RotationValue, CorrespondingCollider.steerAngle, 0);