Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
  • Help Room /
avatar image
0
Question by Luffyhead12 · Feb 05, 2016 at 02:33 AM · scripting problemscripting beginnersplit-screen

Adding second player script?

How do I make this script into a script where the script references everything the same but with getinput.axis for a second player? Using "Horizontal2" and "Vertical2" in the EASIEST possible way please,

I have a second screen setup, second car and all. Setup Horizontal and Vertical to Arrows, Horizontal2 and Vertical2 to WASD. PLEASE TELL ME HOW TO INCORPORATE Horizontal2 and Vertical2 without affecting the script.

I tried copying and pasting the same section into a second script the exact same and changing it to horizontal2 and vertical2 in the "Keyboard Controlling" section.

DIDNT WORK. Any help would be Greatly appreciated. Need anything else to work it out let me know please. Thanks a lot!

Here you go.

pragma warning disable 0414

using UnityEngine; using System; using System.Collections; using System.Collections.Generic; using UnityEngine.UI;

[RequireComponent (typeof(Rigidbody))] public class RCCCarControllerV2 : MonoBehaviour {

 //Rigidbody.
 private Rigidbody rigid;

 //Mobile Controller.
 public bool mobileController = false;
 public MobileGUIType _mobileControllerType;
 public enum MobileGUIType{UIController, NGUIController}
 
 //Dashboard Type.
 public bool dashBoard = false;
 public DashboardType _dashboardType;
 public enum DashboardType{UIDashboard, NGUIDashboard}
 
 public bool useAccelerometerForSteer = false, steeringWheelControl = false;
 public float gyroTiltMultiplier = 2.0f;

 //Display Information GUI
 public bool demoGUI = false;

 private Vector3 defbrakePedalPosition;
 private bool mobileHandbrake = false;

 //Finds all buttons when new vehicle spawned. Useful for spawning new vehicles on your scene at runtime.
 public bool autoFindButtons = true;
 
 //NGUI Controller Elements.
 //If boost UI is selected, will multiply default engine torque by 1.5.
 public RCCNGUIController gasPedal, brakePedal, leftArrow, rightArrow, handbrakeGui, boostGui;
 //UI Controller Elements.
 public RCCUIController gasPedalUI, brakePedalUI, leftArrowUI, rightArrowUI, handbrakeUI, boostUI;
 
 // Wheel Transforms Of The Vehicle.
 public Transform FrontLeftWheelTransform;
 public Transform FrontRightWheelTransform;
 public Transform RearLeftWheelTransform;
 public Transform RearRightWheelTransform;
 
 //Wheel Colliders Of The Vehicle.
 public WheelCollider FrontLeftWheelCollider;
 public WheelCollider FrontRightWheelCollider;
 public WheelCollider RearLeftWheelCollider;
 public WheelCollider RearRightWheelCollider;
 private WheelCollider[] allWheelColliders;
 
 //Extra Wheels. In case of if your vehicle has extra wheels.
 public Transform[] ExtraRearWheelsTransform;
 public WheelCollider[] ExtraRearWheelsCollider;

 //Applies Engine Torque To Extra Rear Wheels.
 public bool applyEngineTorqueToExtraRearWheelColliders = true;
 
 // Driver Steering Wheel. In case of if your vehicle has individual steering wheel model in interior.
 public Transform SteeringWheel;
 
 // Set wheel drive of the vehicle. If you are using rwd, you have to be careful with your rear wheel collider
 // settings and com of the vehicle. Otherwise, vehicle will behave like a toy. ***My advice is use fwd always***
 public WheelType _wheelTypeChoise;
 public enum WheelType{FWD, RWD, AWD}
 
 //Center of mass.
 public Transform COM;

 //Enables/Disables controlling the vehicle.
 public bool canControl = true;
 //Enables/Disables auto reversing when player press brake button. Useful for if you are making parking style game.
 public bool autoReverse = false;
 //Enables/Disables automatic gear shifting of the vehicle.
 public bool automaticGear = true;
 private bool canGoReverseNow = false;
 
 public AnimationCurve[] engineTorqueCurve;
 public float[] gearSpeed;
 public float engineTorque = 2500.0f;
 public float maxEngineRPM = 6000.0f;
 public float minEngineRPM = 1000.0f;

 //Maximum steer angle of your vehicle.
 public float steerAngle = 40.0f;
 //Maximum steer angle at highest speed.
 public float highspeedsteerAngle = 10.0f;
 //Maximum speed for steer angle.
 public float highspeedsteerAngleAtspeed = 100.0f;

 //Anti Roll Force for preventing flip overs.
 public float antiRoll = 10000.0f;

 public float speed;
 public float brake = 4000.0f;
 public float maxspeed = 180.0f;

 //Enables/Disables differential of the vehicle. For more information, google it.
 public bool useDifferential = true;
 private float differentialRatioRight;
 private float differentialRatioLeft;
 private float differentialDifference;

 private float resetTime = 0f;
 private float defSteerAngle = 0f;
 
 //Gears.
 public int currentGear;
 public int totalGears = 6;
 public bool changingGear = false;

 //If your vehicle shifts your gear too soon, lower shift rate. If shifts too late, higher shift rate.
 public float gearShiftRate = 12.0f;
 
 // Each Wheel Transform's Rotation Value.
 private float _rotationValueFL, _rotationValueFR, _rotationValueRL, _rotationValueRR;
 private float[] rotationValueExtra;
 
 //Private Bools.
 private bool reversing = false;
 private bool headLightsOn = false;
 private float acceleration = 0f;
 private float lastVelocity = 0f;
 
 //Audio.
 private AudioSource skidSound;
 public AudioClip skidClip;
 private AudioSource crashSound;
 public AudioClip[] crashClips;
 private AudioSource engineStartSound;
 public AudioClip engineStartClip;
 private AudioSource engineSound;
 public AudioClip engineClip;
 private AudioSource gearShiftingSound;
 public AudioClip[] gearShiftingClips;
 
 //Collision Force Limit.
 private int collisionForceLimit = 5;
 
 //Inputs.
 public float motorInput = 0f;
 public float steerInput = 0f;
 public float boostInput = 1f;
 public float engineRPM = 0f;
 
 //UI DashBoard.
 public RCCDashboardInputs UIInputs;
 private RectTransform RPMNeedle;
 private RectTransform KMHNeedle;
 private float RPMNeedleRotation = 0.0f;
 private float KMHNeedleRotation = 0.0f;
 private float smoothedNeedleRotation = 0.0f;
 
 //NGUI Dashboard.
 public GameObject RPMNeedleNGUI;
 public GameObject KMHNeedleNGUI;
 public float minimumRPMNeedleAngle = 20.0f;
 public float maximumRPMNeedleAngle = 160.0f;
 public float minimumKMHNeedleAngle = -25.0f;
 public float maximumKMHNeedleAngle = 155.0f;
 
 //Smokes.
 public GameObject wheelSlipPrefab;
 private List <ParticleSystem> _wheelParticles = new List<ParticleSystem>();
 public ParticleSystem[] exhaustGas;

 //Script will simulate chassis movement based on vehicle rigidbody situation.
 public GameObject chassis;
 //Chassis Vertical Lean Sensitivity
 public float chassisVerticalLean = 4.0f;
 //Chassis Horizontal Lean Sensitivity
 public float chassisHorizontalLean = 4.0f;

 private float horizontalLean = 0.0f;
 private float verticalLean = 0.0f;
 
 //Lights.
 public Light[] headLights;
 public Light[] brakeLights;
 public Light[] reverseLights;
 
 //Steering Wheel Controller.
 public float steeringWheelMaximumsteerAngle = 180.0f;
 public float steeringWheelGuiScale = 256f;
 private float _steeringWheelGuiScale = 0f;
 public float steeringWheelXOffset = 30.0f;
 public float steeringWheelYOffset = 30.0f;
 public Vector2 steeringWheelPivotPos = Vector2.zero;
 public float steeringWheelResetPosspeed = 200.0f;
 public Texture2D steeringWheelTexture;
 private float steeringWheelsteerAngle ;
 private bool  steeringWheelIsTouching;
 private Rect steeringWheelTextureRect;
 private Vector2 steeringWheelWheelCenter;
 private float steeringWheelOldAngle;
 private int touchId = -1;
 private Vector2 touchPos;
 
 
 void Start (){

     rigid = GetComponent<Rigidbody>();
     Time.fixedDeltaTime = .02f;
     rigid.maxAngularVelocity = 5f;
     allWheelColliders = GetComponentsInChildren<WheelCollider>();
     rotationValueExtra = new float[ExtraRearWheelsCollider.Length];
     defSteerAngle = steerAngle;

     if(dashBoard){

         UIInputs = GameObject.FindObjectOfType<RCCDashboardInputs>();
         UIInputs.GetNeedles();

         if(_dashboardType == DashboardType.NGUIDashboard){
             RPMNeedleNGUI = UIInputs.RPMNeedleNGUI;
             KMHNeedleNGUI = UIInputs.KMHNeedleNGUI;
         }else{
             RPMNeedle = UIInputs.RPMNeedleUI;
             KMHNeedle = UIInputs.KMHNeedleUI;
         }
          
     }

     if(autoFindButtons && mobileController){

         RCCMobileButtons UIButtons = GameObject.FindObjectOfType<RCCMobileButtons>();

         if(_mobileControllerType == MobileGUIType.NGUIController){
             gasPedal = UIButtons.gasButton.GetComponent<RCCNGUIController>();
             brakePedal = UIButtons.brakeButton.GetComponent<RCCNGUIController>();
             leftArrow = UIButtons.leftButton.GetComponent<RCCNGUIController>();
             rightArrow = UIButtons.rightButton.GetComponent<RCCNGUIController>();
             handbrakeGui = UIButtons.handbrakeButton.GetComponent<RCCNGUIController>();
             if(UIButtons.boostButton)
                 boostGui = UIButtons.boostButton.GetComponent<RCCNGUIController>();
         }else{
             gasPedalUI = UIButtons.gasButton.GetComponent<RCCUIController>();
             brakePedalUI = UIButtons.brakeButton.GetComponent<RCCUIController>();
             leftArrowUI = UIButtons.leftButton.GetComponent<RCCUIController>();
             rightArrowUI = UIButtons.rightButton.GetComponent<RCCUIController>();
             handbrakeUI = UIButtons.handbrakeButton.GetComponent<RCCUIController>();
             if(UIButtons.boostButton)
                 boostUI = UIButtons.boostButton.GetComponent<RCCUIController>();
         }

     }

     SoundsInitialize();
     MobileGUI();
     SteeringWheelInit();
     SmokeInit();
     
 }

 public AudioSource CreateAudioSource(string audioName, float minDistance, float volume, AudioClip audioClip, bool loop, bool playNow, bool destroyAfterFinished){

     GameObject audioSource = new GameObject(audioName);
     audioSource.transform.position = transform.position;
     audioSource.transform.rotation = transform.rotation;
     audioSource.transform.parent = transform;
     audioSource.AddComponent<AudioSource>();
     audioSource.GetComponent<AudioSource>().minDistance = minDistance;
     audioSource.GetComponent<AudioSource>().volume = volume;
     audioSource.GetComponent<AudioSource>().clip = audioClip;
     audioSource.GetComponent<AudioSource>().loop = loop;
     audioSource.GetComponent<AudioSource>().spatialBlend = 1f;

     if(playNow)
         audioSource.GetComponent<AudioSource>().Play();

     if(destroyAfterFinished)
         Destroy(audioSource, audioClip.length);

     return audioSource.GetComponent<AudioSource>();

 }
 
 public void CreateWheelColliders (){
     
     List <Transform> allWheelTransforms = new List<Transform>();
     allWheelTransforms.Add(FrontLeftWheelTransform); allWheelTransforms.Add(FrontRightWheelTransform); allWheelTransforms.Add(RearLeftWheelTransform); allWheelTransforms.Add(RearRightWheelTransform);
     
     if(allWheelTransforms[0] == null){
         Debug.LogError("You haven't choose your Wheel Transforms. Please select all of your Wheel Transforms before creating Wheel Colliders. Script needs to know their positions, aye?");
         return;
     }
     
     transform.rotation = Quaternion.identity;
     
     GameObject WheelColliders = new GameObject("Wheel Colliders");
     WheelColliders.transform.parent = transform;
     WheelColliders.transform.rotation = transform.rotation;
     WheelColliders.transform.localPosition = Vector3.zero;
     WheelColliders.transform.localScale = Vector3.one;
     
     foreach(Transform wheel in allWheelTransforms){
         
         GameObject wheelcollider = new GameObject(wheel.transform.name); 
         
         wheelcollider.transform.position = wheel.transform.position;
         wheelcollider.transform.rotation = transform.rotation;
         wheelcollider.transform.name = wheel.transform.name;
         wheelcollider.transform.parent = WheelColliders.transform;
         wheelcollider.transform.localScale = Vector3.one;
         wheelcollider.layer = LayerMask.NameToLayer("Wheel");
         wheelcollider.AddComponent<WheelCollider>();
         wheelcollider.GetComponent<WheelCollider>().radius = (wheel.GetComponent<MeshRenderer>().bounds.size.y / 2f) / transform.localScale.y;

         wheelcollider.AddComponent<RCCWheelSkidmarks>();
         wheelcollider.GetComponent<RCCWheelSkidmarks>().vehicle = GetComponent<RCCCarControllerV2>();
         
         JointSpring spring = wheelcollider.GetComponent<WheelCollider>().suspensionSpring;

         spring.spring = 30000f;
         spring.damper = 2000f;

         wheelcollider.GetComponent<WheelCollider>().suspensionSpring = spring;
         wheelcollider.GetComponent<WheelCollider>().suspensionDistance = .2f;
         wheelcollider.GetComponent<WheelCollider>().forceAppPointDistance = .25f;
         wheelcollider.GetComponent<WheelCollider>().mass = 100f;
         wheelcollider.GetComponent<WheelCollider>().wheelDampingRate = .5f;

         wheelcollider.transform.localPosition = new Vector3(wheelcollider.transform.localPosition.x, wheelcollider.transform.localPosition.y + (wheelcollider.GetComponent<WheelCollider>().suspensionDistance / 2f), wheelcollider.transform.localPosition.z);
         
         WheelFrictionCurve sidewaysFriction = wheelcollider.GetComponent<WheelCollider>().sidewaysFriction;
         WheelFrictionCurve forwardFriction = wheelcollider.GetComponent<WheelCollider>().forwardFriction;

         forwardFriction.extremumSlip = .4f;
         forwardFriction.extremumValue = 1;
         forwardFriction.asymptoteSlip = .8f;
         forwardFriction.asymptoteValue = .75f;
         forwardFriction.stiffness = 1.75f;

         sidewaysFriction.extremumSlip = .25f;
         sidewaysFriction.extremumValue = 1;
         sidewaysFriction.asymptoteSlip = .5f;
         sidewaysFriction.asymptoteValue = .75f;
         sidewaysFriction.stiffness = 2f;

         wheelcollider.GetComponent<WheelCollider>().sidewaysFriction = sidewaysFriction;
         wheelcollider.GetComponent<WheelCollider>().forwardFriction = forwardFriction;

     }
     
     WheelColliders.layer = LayerMask.NameToLayer("Wheel");
     
     WheelCollider[] allWheelColliders = new WheelCollider[allWheelTransforms.Count];
     allWheelColliders = GetComponentsInChildren<WheelCollider>();
     
     FrontLeftWheelCollider = allWheelColliders[0];
     FrontRightWheelCollider = allWheelColliders[1];
     RearLeftWheelCollider = allWheelColliders[2];
     RearRightWheelCollider = allWheelColliders[3];
     
 }
 
 public void SoundsInitialize (){

     engineSound = CreateAudioSource("Engine Sound AudioSource", 5, 0, engineClip, true, true, false);
     skidSound = CreateAudioSource("Skid Sound AudioSource", 5, 0, skidClip, true, true, false);
     
 }
 
 public void KillOrStartEngine (int i){
     
     if(i == 0){
         canControl = false;
     }else{
         canControl = true;
         StartEngineSound();
     }
     
 }
 
 public void StartEngineSound (){

     engineStartSound = CreateAudioSource("Engine Start AudioSource", 5, 1, engineStartClip, false, true, true);
     
 }
 
 public void SteeringWheelInit (){
     
     _steeringWheelGuiScale = ((Screen.width * 1.0f) / 2.7f) * (steeringWheelGuiScale / 256f);
     steeringWheelIsTouching = false;
     steeringWheelTextureRect = new Rect( steeringWheelXOffset + (_steeringWheelGuiScale / Screen.width ), -steeringWheelYOffset + (Screen.height - (_steeringWheelGuiScale)), _steeringWheelGuiScale, _steeringWheelGuiScale );
     steeringWheelWheelCenter = new Vector2( steeringWheelTextureRect.x + steeringWheelTextureRect.width * 0.5f, Screen.height - steeringWheelTextureRect.y - steeringWheelTextureRect.height * 0.5f );
     steeringWheelsteerAngle  = 0f;
     
 }
 
 public void SmokeInit (){

     if(!wheelSlipPrefab)
         return;
     
     for(int i = 0; i < allWheelColliders.Length; i++){
         GameObject ps = (GameObject)Instantiate(wheelSlipPrefab, transform.position, transform.rotation) as GameObject;
         _wheelParticles.Add(ps.GetComponent<ParticleSystem>());
         ps.GetComponent<ParticleSystem>().enableEmission = false;
         ps.transform.parent = allWheelColliders[i].transform;
         ps.transform.localPosition = Vector3.zero;
     }

// _wheelParticles[0].transform.parent = FrontRightWheelCollider.transform; // _wheelParticles[1].transform.parent = FrontLeftWheelCollider.transform; // _wheelParticles[2].transform.parent = RearRightWheelCollider.transform; // _wheelParticles[3].transform.parent = RearLeftWheelCollider.transform; //
// _wheelParticles[0].transform.localPosition = Vector3.zero; // _wheelParticles[1].transform.localPosition = Vector3.zero; // _wheelParticles[2].transform.localPosition = Vector3.zero; // _wheelParticles[3].transform.localPosition = Vector3.zero;

 }
 
 public void MobileGUI (){

     if(mobileController){
         if(_mobileControllerType == MobileGUIType.NGUIController){
             defbrakePedalPosition = brakePedal.transform.position;
         }else{
             defbrakePedalPosition = brakePedalUI.transform.position;
         }
     }
     
 }
 
 void Update (){
     
     if(canControl){
         if(mobileController){
             if(_mobileControllerType == MobileGUIType.NGUIController)
                 NGUIControlling();
             if(_mobileControllerType == MobileGUIType.UIController)
                 UIControlling();
             MobileSteeringInputs();
             if(steeringWheelControl)
                 SteeringWheelControlling();
         }else{
             KeyboardControlling();
         }
         Lights();
         ResetCar();
         ShiftGears();
     }

     WheelAlign();
     SkidAudio();
     WheelCamber();

     if(chassis)
         Chassis();
     if(dashBoard && canControl)
         DashboardGUI();
     
 }
 
 void FixedUpdate (){

     Braking();
     Differential();
     AntiRollBars();
     SmokeWeedEveryday();
     
     if(canControl){
         Engine();
     }else{
         RearLeftWheelCollider.motorTorque = 0;
         RearRightWheelCollider.motorTorque = 0;
         FrontLeftWheelCollider.motorTorque = 0;
         FrontRightWheelCollider.motorTorque = 0;
         RearLeftWheelCollider.brakeTorque = brake / 12f;
         RearRightWheelCollider.brakeTorque = brake / 12f;
         FrontLeftWheelCollider.brakeTorque = brake / 12f;
         FrontRightWheelCollider.brakeTorque = brake / 12f;
         engineSound.volume = Mathf.Lerp(engineSound.volume, 0f, Time.deltaTime);
         engineSound.pitch = Mathf.Lerp(engineSound.pitch, 0f, Time.deltaTime);
     }
     
 }
 
 public void Engine (){
     
     //Speed.
     speed = rigid.velocity.magnitude * 3.0f;
     
     //Acceleration Calculation.
     acceleration = 0f;
     acceleration = (transform.InverseTransformDirection(rigid.velocity).z - lastVelocity) / Time.fixedDeltaTime;
     lastVelocity = transform.InverseTransformDirection(rigid.velocity).z;
     
     //Drag Limit Depends On Vehicle Acceleration.
     rigid.drag = Mathf.Clamp((acceleration / 50f), 0f, .4f);
     
     //Steer Limit.
     steerAngle = Mathf.Lerp(defSteerAngle, highspeedsteerAngle, (speed / highspeedsteerAngleAtspeed));
     
     //Engine RPM.
     engineRPM = Mathf.Clamp((((Mathf.Abs((RearLeftWheelCollider.rpm + RearRightWheelCollider.rpm)) * gearShiftRate) + minEngineRPM)) / (float)(currentGear + 1), minEngineRPM, maxEngineRPM);
     
     //Reversing Bool.
     if(motorInput <= 0  && RearLeftWheelCollider.rpm < 20 && canGoReverseNow)
         reversing = true;
     else
         reversing = false;
     
     //Auto Reverse Bool.
     if(autoReverse){
         canGoReverseNow = true;
     }else{
         if(motorInput >= -.1f && speed < 5)
             canGoReverseNow = true;
         else if(motorInput < 0 && transform.InverseTransformDirection(rigid.velocity).z > 1) 
             canGoReverseNow = false;
     }
     
     //Engine Audio Volume.
     if(engineSound){

         if(!reversing)
             engineSound.volume = Mathf.Lerp (engineSound.volume, Mathf.Clamp (motorInput, .35f, .85f), Time.deltaTime * 5f);
         else
             engineSound.volume = Mathf.Lerp (engineSound.volume, Mathf.Clamp (Mathf.Abs(motorInput), .35f, .85f), Time.deltaTime * 5f);
     
         engineSound.pitch = Mathf.Lerp ( engineSound.pitch, Mathf.Lerp (1f, 2f, (engineRPM - minEngineRPM / 1.25f) / (maxEngineRPM + minEngineRPM)), Time.deltaTime * 5f);

     }
     
     #region Wheel Type Motor Torque.

     //Applying WheelCollider Motor Torques Depends On Wheel Type Choice.
     switch(_wheelTypeChoise){
         
     case WheelType.FWD:
         FrontLeftWheelCollider.motorTorque = ApplyWheelTorque(true);
         FrontRightWheelCollider.motorTorque = ApplyWheelTorque(false);
         break;
     case WheelType.RWD:
         RearLeftWheelCollider.motorTorque = ApplyWheelTorque(true);
         RearRightWheelCollider.motorTorque = ApplyWheelTorque(false);
         break;
     case WheelType.AWD:
         FrontLeftWheelCollider.motorTorque = ApplyWheelTorque(true);
         FrontRightWheelCollider.motorTorque = ApplyWheelTorque(false);
         RearLeftWheelCollider.motorTorque = ApplyWheelTorque(true);
         RearRightWheelCollider.motorTorque = ApplyWheelTorque(false);
         break;

     }

     if(ExtraRearWheelsCollider.Length > 0 && applyEngineTorqueToExtraRearWheelColliders){
         foreach(WheelCollider wc in ExtraRearWheelsCollider)
             wc.motorTorque = ApplyWheelTorque(true);
     }
     
     #endregion Wheel Type
     
 }

 public float ApplyWheelTorque(bool leftSide){

     if(speed > maxspeed || Mathf.Abs(FrontLeftWheelCollider.rpm) > 3000 || Mathf.Abs(RearLeftWheelCollider.rpm) > 3000)
         return 0;

     if(reversing && speed > 30)
         return 0;
     
     float torque = 0;
     
     if(changingGear){
         torque = 0;
     }else{
         if(!reversing){
             if(leftSide)
                 torque = (engineTorque) * (Mathf.Clamp(motorInput * differentialRatioLeft, 0f, 1f) * boostInput) * engineTorqueCurve[currentGear].Evaluate(speed);
             else
                 torque = (engineTorque) * (Mathf.Clamp(motorInput * differentialRatioRight, 0f, 1f) * boostInput) * engineTorqueCurve[currentGear].Evaluate(speed);
         }else{
             torque =  engineTorque * motorInput;
         }
     }

     return torque;
     
 }
 
 public void Braking (){
     
     //Handbrake
     if(Input.GetButton("Jump") || mobileHandbrake){

         //FrontLeftWheelCollider.brakeTorque = (brake / 2.5f);
         //FrontRightWheelCollider.brakeTorque = (brake / 2.5f);
         RearLeftWheelCollider.brakeTorque = (brake);
         RearRightWheelCollider.brakeTorque = (brake);
         
     //Normal brake
     }else{
         
         // Deceleration.
         if(Mathf.Abs (motorInput) <= .05f && !changingGear){
             RearLeftWheelCollider.brakeTorque = (brake) / 25f;
             RearRightWheelCollider.brakeTorque = (brake) / 25f;
             FrontLeftWheelCollider.brakeTorque = (brake) / 25f;
             FrontRightWheelCollider.brakeTorque = (brake) / 25f;
         // Braking.
         }else if(motorInput < 0 && !reversing){
             FrontLeftWheelCollider.brakeTorque = (brake) * (Mathf.Abs(motorInput));
             FrontRightWheelCollider.brakeTorque = (brake) * (Mathf.Abs(motorInput));
             RearLeftWheelCollider.brakeTorque = (brake) * (Mathf.Abs(motorInput / 2f));
             RearRightWheelCollider.brakeTorque = (brake) * (Mathf.Abs(motorInput / 2f));
         }else{
             RearLeftWheelCollider.brakeTorque = 0;
             RearRightWheelCollider.brakeTorque = 0;
             FrontLeftWheelCollider.brakeTorque = 0;
             FrontRightWheelCollider.brakeTorque = 0;
         }
         
     }
     
 }
 
 public void Differential (){
     
     if(useDifferential){
         
         if(_wheelTypeChoise == WheelType.FWD){
             differentialDifference = Mathf.Clamp ( Mathf.Abs (FrontRightWheelCollider.rpm) - Mathf.Abs (FrontLeftWheelCollider.rpm), -50f, 50f );
             differentialRatioRight = Mathf.Lerp ( 0f, 1f, ( (((Mathf.Abs (FrontRightWheelCollider.rpm) + Mathf.Abs (FrontLeftWheelCollider.rpm)) + 10 / 2 ) + differentialDifference) /  (Mathf.Abs (FrontRightWheelCollider.rpm) + Mathf.Abs (FrontLeftWheelCollider.rpm))) );
             differentialRatioLeft = Mathf.Lerp ( 0f, 1f, ( (((Mathf.Abs (FrontRightWheelCollider.rpm) + Mathf.Abs (FrontLeftWheelCollider.rpm)) + 10 / 2 ) - differentialDifference) /  (Mathf.Abs (FrontRightWheelCollider.rpm) + Mathf.Abs (FrontLeftWheelCollider.rpm))) );
         }
         if(_wheelTypeChoise == WheelType.RWD){
             differentialDifference = Mathf.Clamp ( Mathf.Abs (RearRightWheelCollider.rpm) - Mathf.Abs (RearLeftWheelCollider.rpm), -50f, 50f );
             differentialRatioRight = Mathf.Lerp ( 0f, 1f, ( (((Mathf.Abs (RearRightWheelCollider.rpm) +  Mathf.Abs (RearLeftWheelCollider.rpm)) + 10 / 2 ) + differentialDifference) /  (Mathf.Abs (RearRightWheelCollider.rpm) + Mathf.Abs (RearLeftWheelCollider.rpm))) );
             differentialRatioLeft = Mathf.Lerp ( 0f, 1f, ( (((Mathf.Abs (RearRightWheelCollider.rpm) +  Mathf.Abs (RearLeftWheelCollider.rpm)) + 10 / 2 ) - differentialDifference) /  (Mathf.Abs (RearRightWheelCollider.rpm) + Mathf.Abs (RearLeftWheelCollider.rpm))) );
         }
         if(_wheelTypeChoise == WheelType.AWD){
             differentialDifference = Mathf.Clamp ( Mathf.Abs (RearRightWheelCollider.rpm) - Mathf.Abs (RearLeftWheelCollider.rpm), -50f, 50f );
             differentialRatioRight = Mathf.Lerp ( 0f, 1f, ( (((Mathf.Abs (RearRightWheelCollider.rpm) +  Mathf.Abs (RearLeftWheelCollider.rpm)) + 10 / 2 ) + differentialDifference) /  (Mathf.Abs (RearRightWheelCollider.rpm) + Mathf.Abs (RearLeftWheelCollider.rpm))) );
             differentialRatioLeft = Mathf.Lerp ( 0f, 1f, ( (((Mathf.Abs (RearRightWheelCollider.rpm) +  Mathf.Abs (RearLeftWheelCollider.rpm)) + 10 / 2 ) - differentialDifference) /  (Mathf.Abs (RearRightWheelCollider.rpm) + Mathf.Abs (RearLeftWheelCollider.rpm))) );
         }
         
     }else{
         
         differentialRatioRight = 1;
         differentialRatioLeft = 1;
         
     }
     
 }
 
 public void AntiRollBars (){
     
     WheelHit FrontWheelHit;
     
     float travelFL = 1.0f;
     float travelFR = 1.0f;
     
     bool groundedFL= FrontLeftWheelCollider.GetGroundHit(out FrontWheelHit);
     
     if (groundedFL)
         travelFL = (-FrontLeftWheelCollider.transform.InverseTransformPoint(FrontWheelHit.point).y - FrontLeftWheelCollider.radius) / FrontLeftWheelCollider.suspensionDistance;
     
     bool groundedFR= FrontRightWheelCollider.GetGroundHit(out FrontWheelHit);
     
     if (groundedFR)
         travelFR = (-FrontRightWheelCollider.transform.InverseTransformPoint(FrontWheelHit.point).y - FrontRightWheelCollider.radius) / FrontRightWheelCollider.suspensionDistance;
     
     float antiRollForceFront= (travelFL - travelFR) * antiRoll;
     
     if (groundedFL)
         rigid.AddForceAtPosition(FrontLeftWheelCollider.transform.up * -antiRollForceFront, FrontLeftWheelCollider.transform.position); 
     if (groundedFR)
         rigid.AddForceAtPosition(FrontRightWheelCollider.transform.up * antiRollForceFront, FrontRightWheelCollider.transform.position); 
     
     WheelHit RearWheelHit;
     
     float travelRL = 1.0f;
     float travelRR = 1.0f;
     
     bool groundedRL= RearLeftWheelCollider.GetGroundHit(out RearWheelHit);
     
     if (groundedRL)
         travelRL = (-RearLeftWheelCollider.transform.InverseTransformPoint(RearWheelHit.point).y - RearLeftWheelCollider.radius) / RearLeftWheelCollider.suspensionDistance;
     
     bool groundedRR= RearRightWheelCollider.GetGroundHit(out RearWheelHit);
     
     if (groundedRR)
         travelRR = (-RearRightWheelCollider.transform.InverseTransformPoint(RearWheelHit.point).y - RearRightWheelCollider.radius) / RearRightWheelCollider.suspensionDistance;
     
     float antiRollForceRear= (travelRL - travelRR) * antiRoll;
     
     if (groundedRL)
         rigid.AddForceAtPosition(RearLeftWheelCollider.transform.up * -antiRollForceRear, RearLeftWheelCollider.transform.position); 
     if (groundedRR)
         rigid.AddForceAtPosition(RearRightWheelCollider.transform.up * antiRollForceRear, RearRightWheelCollider.transform.position);

     if (groundedRR && groundedRL)
         rigid.AddRelativeTorque((Vector3.up * (steerInput)) * 1000f);
     
 }
 
 public void MobileSteeringInputs (){
     
     //Accelerometer Inputs.
     if(useAccelerometerForSteer){
         
         steerInput = Input.acceleration.x * gyroTiltMultiplier;

         FrontLeftWheelCollider.steerAngle = Mathf.Clamp((steerAngle * steerInput), -steerAngle, steerAngle);
         FrontRightWheelCollider.steerAngle = Mathf.Clamp((steerAngle * steerInput), -steerAngle, steerAngle);
         
     }else{
         
         //TouchScreen Inputs.
         if(!steeringWheelControl){

             FrontLeftWheelCollider.steerAngle = Mathf.Clamp((steerAngle * steerInput), -steerAngle, steerAngle);
             FrontRightWheelCollider.steerAngle = Mathf.Clamp((steerAngle * steerInput), -steerAngle, steerAngle);

         //SteeringWheel Inputs.
         }else{

             FrontLeftWheelCollider.steerAngle = (steerAngle * (-steeringWheelsteerAngle / steeringWheelMaximumsteerAngle));
             FrontRightWheelCollider.steerAngle = (steerAngle * (-steeringWheelsteerAngle / steeringWheelMaximumsteerAngle));
             
         }
         
     }
     
 }
 
 public void SteeringWheelControlling (){
     
     if(steeringWheelIsTouching){
         
         foreach(Touch touch in Input.touches )
         {
             if(touch.fingerId == touchId){
                 touchPos = touch.position;
                 
                 if(touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled){
                     steeringWheelIsTouching = false; 
                 }
             }
         }
         
         float newsteerAngle = Vector2.Angle(Vector2.up, touchPos - steeringWheelWheelCenter);
         
         if(Vector2.Distance(touchPos, steeringWheelWheelCenter) > 20f){
             if(touchPos.x > steeringWheelWheelCenter.x)
                 steeringWheelsteerAngle -= newsteerAngle - steeringWheelOldAngle;
             else
                 steeringWheelsteerAngle += newsteerAngle - steeringWheelOldAngle;
         }
         
         if(steeringWheelsteerAngle > steeringWheelMaximumsteerAngle)
             steeringWheelsteerAngle = steeringWheelMaximumsteerAngle;
         else if(steeringWheelsteerAngle < -steeringWheelMaximumsteerAngle)
             steeringWheelsteerAngle = -steeringWheelMaximumsteerAngle;
         
         steeringWheelOldAngle = newsteerAngle;
         
     }else{
         
         foreach(Touch touch in Input.touches){
             if(touch.phase == TouchPhase.Began){
                 if(steeringWheelTextureRect.Contains( new Vector2( touch.position.x, Screen.height - touch.position.y))){
                     steeringWheelIsTouching = true;
                     steeringWheelOldAngle = Vector2.Angle(Vector2.up, touch.position - steeringWheelWheelCenter);
                     touchId = touch.fingerId;
                 }
             }
         }
         
         if(!Mathf.Approximately(0f, steeringWheelsteerAngle)){
             float deltaAngle = steeringWheelResetPosspeed * Time.deltaTime;
             
             if(Mathf.Abs(deltaAngle) > Mathf.Abs(steeringWheelsteerAngle)){
                 steeringWheelsteerAngle  = 0f;
                 return;
             }
             
             if(steeringWheelsteerAngle > 0f)
                 steeringWheelsteerAngle -= deltaAngle;
             else
                 steeringWheelsteerAngle += deltaAngle;
         }
         
     }
     
 }
 
 public void KeyboardControlling (){
     
     //Motor Input.
     if(!changingGear)
         motorInput = (Input.GetAxis("Vertical"));
     else
         motorInput = Mathf.Clamp(Input.GetAxis("Vertical"), -1f, 0f);
     
     //Steering Input.
     if(Mathf.Abs (Input.GetAxis("Horizontal")) > .05f)
         steerInput = Mathf.Lerp (steerInput, Input.GetAxis("Horizontal"), Time.deltaTime * 10);
     else
         steerInput = Mathf.Lerp (steerInput, Input.GetAxis("Horizontal"), Time.deltaTime * 10);

     //Boost Input.
     if(Input.GetButton("Fire2"))
         boostInput = 1.5f;
     else
         boostInput = 1f;
     
     FrontLeftWheelCollider.steerAngle = (steerAngle * steerInput);
     FrontRightWheelCollider.steerAngle = (steerAngle * steerInput);
     
 }
 public void NGUIControlling (){
     
     //Motor Input.
     if(!changingGear)
         motorInput = gasPedal.input + (-brakePedal.input);
     else
         motorInput = (-brakePedal.input);
     
     //Steer Input.
     if(!useAccelerometerForSteer && !steeringWheelControl)
         steerInput = rightArrow.input + (-leftArrow.input);
     
     //Handbrake Input.
     if(handbrakeGui.input > .1f)
         mobileHandbrake = true;
     else
         mobileHandbrake = false;
     
     //Boost Input.
     if(boostGui)
         boostInput = Mathf.Clamp(boostGui.input * 2f, 1f, 1.5f);
     
 }

 public void UIControlling (){
     
     //Motor Input.
     if(!changingGear)
         motorInput = gasPedalUI.input + (-brakePedalUI.input);
     else
         motorInput = (-brakePedalUI.input);
     
     //Steer Input.
     if(!useAccelerometerForSteer && !steeringWheelControl)
         steerInput = rightArrowUI.input + (-leftArrowUI.input);
     
     //Handbrake Input.
     if(handbrakeUI.input > .1f)
         mobileHandbrake = true;
     else
         mobileHandbrake = false;
     
     //Boost Input.
     if(boostUI)
         boostInput = Mathf.Clamp(boostUI.input * 2f, 1f, 1.5f);
     
 }
 
 public void ShiftGears (){
     
     if(automaticGear){

         if(currentGear < totalGears - 1 && !changingGear){
             if(speed > gearSpeed[currentGear + 1] && RearLeftWheelCollider.rpm >= 0){
                 StartCoroutine("ChangingGear", currentGear + 1);
             }
         }
         
         if(currentGear > 0){
             if(engineRPM < minEngineRPM + 1000 && !changingGear){

                 for(int i = 0; i < gearSpeed.Length; i++){
                     if(speed > gearSpeed[i])
                         StartCoroutine("ChangingGear", i);
                 }

             }
         }
         
     }else{
         
         if(currentGear < totalGears - 1 && !changingGear){
             if(Input.GetButtonDown("RCCShiftUp")){
                 StartCoroutine("ChangingGear", currentGear + 1);
             }
         }
         
         if(currentGear > 0){
             if(Input.GetButtonDown("RCCShiftDown")){
                 StartCoroutine("ChangingGear", currentGear - 1);
             }
         }
         
     }
     
 }
 
 IEnumerator ChangingGear(int gear){
     
     changingGear = true;
     
     if(gearShiftingClips.Length > 0){

         gearShiftingSound = CreateAudioSource("Gear Shifting AudioSource", 5f, .3f, gearShiftingClips[UnityEngine.Random.Range(0, gearShiftingClips.Length)], false, true, true);
         
     }
     
     yield return new WaitForSeconds(.35f);
     changingGear = false;
     currentGear = gear;
     
 }
 
 public void WheelAlign (){
     
     RaycastHit hit;
     WheelHit CorrespondingGroundHit;
     
     
     //Front Left Wheel Transform.
     Vector3 ColliderCenterPointFL = FrontLeftWheelCollider.transform.TransformPoint( FrontLeftWheelCollider.center );
     FrontLeftWheelCollider.GetGroundHit( out CorrespondingGroundHit );
     
     if ( Physics.Raycast( ColliderCenterPointFL, -FrontLeftWheelCollider.transform.up, out hit, (FrontLeftWheelCollider.suspensionDistance + FrontLeftWheelCollider.radius) * transform.localScale.y) ) {
         if(hit.transform.gameObject.layer != LayerMask.NameToLayer("Vehicle")){
             FrontLeftWheelTransform.transform.position = hit.point + (FrontLeftWheelCollider.transform.up * FrontLeftWheelCollider.radius) * transform.localScale.y;
             float extension = (-FrontLeftWheelCollider.transform.InverseTransformPoint(CorrespondingGroundHit.point).y - FrontLeftWheelCollider.radius) / FrontLeftWheelCollider.suspensionDistance;
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point + FrontLeftWheelCollider.transform.up * (CorrespondingGroundHit.force / rigid.mass), extension <= 0.0 ? Color.magenta : Color.white);
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - FrontLeftWheelCollider.transform.forward * CorrespondingGroundHit.forwardSlip, Color.green);
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - FrontLeftWheelCollider.transform.right * CorrespondingGroundHit.sidewaysSlip, Color.red);
         }
     }else{
         FrontLeftWheelTransform.transform.position = ColliderCenterPointFL - (FrontLeftWheelCollider.transform.up * FrontLeftWheelCollider.suspensionDistance) * transform.localScale.y;
     }

     _rotationValueFL += FrontLeftWheelCollider.rpm * ( 6 ) * Time.deltaTime;
     FrontLeftWheelTransform.transform.rotation = FrontLeftWheelCollider.transform.rotation * Quaternion.Euler( _rotationValueFL, FrontLeftWheelCollider.steerAngle, FrontLeftWheelCollider.transform.rotation.z);
     
     
     //Front Right Wheel Transform.
     Vector3 ColliderCenterPointFR = FrontRightWheelCollider.transform.TransformPoint( FrontRightWheelCollider.center );
     FrontRightWheelCollider.GetGroundHit( out CorrespondingGroundHit );
     
     if ( Physics.Raycast( ColliderCenterPointFR, -FrontRightWheelCollider.transform.up, out hit, (FrontRightWheelCollider.suspensionDistance + FrontRightWheelCollider.radius) * transform.localScale.y ) ) {
         if(hit.transform.gameObject.layer != LayerMask.NameToLayer("Vehicle")){
             FrontRightWheelTransform.transform.position = hit.point + (FrontRightWheelCollider.transform.up * FrontRightWheelCollider.radius) * transform.localScale.y;
             float extension = (-FrontRightWheelCollider.transform.InverseTransformPoint(CorrespondingGroundHit.point).y - FrontRightWheelCollider.radius) / FrontRightWheelCollider.suspensionDistance;
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point + FrontRightWheelCollider.transform.up * (CorrespondingGroundHit.force / rigid.mass), extension <= 0.0 ? Color.magenta : Color.white);
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - FrontRightWheelCollider.transform.forward * CorrespondingGroundHit.forwardSlip, Color.green);
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - FrontRightWheelCollider.transform.right * CorrespondingGroundHit.sidewaysSlip, Color.red);
         }
     }else{
         FrontRightWheelTransform.transform.position = ColliderCenterPointFR - (FrontRightWheelCollider.transform.up * FrontRightWheelCollider.suspensionDistance) * transform.localScale.y;
     }

     _rotationValueFR += FrontRightWheelCollider.rpm * ( 6 ) * Time.deltaTime;
     FrontRightWheelTransform.transform.rotation = FrontRightWheelCollider.transform.rotation * Quaternion.Euler( _rotationValueFR, FrontRightWheelCollider.steerAngle, FrontRightWheelCollider.transform.rotation.z);
     
     
     //Rear Left Wheel Transform.
     Vector3 ColliderCenterPointRL = RearLeftWheelCollider.transform.TransformPoint( RearLeftWheelCollider.center );
     RearLeftWheelCollider.GetGroundHit( out CorrespondingGroundHit );
     
     if ( Physics.Raycast( ColliderCenterPointRL, -RearLeftWheelCollider.transform.up, out hit, (RearLeftWheelCollider.suspensionDistance + RearLeftWheelCollider.radius) * transform.localScale.y ) ) {
         if(hit.transform.gameObject.layer != LayerMask.NameToLayer("Vehicle")){
             RearLeftWheelTransform.transform.position = hit.point + (RearLeftWheelCollider.transform.up * RearLeftWheelCollider.radius) * transform.localScale.y;
             float extension = (-RearLeftWheelCollider.transform.InverseTransformPoint(CorrespondingGroundHit.point).y - RearLeftWheelCollider.radius) / RearLeftWheelCollider.suspensionDistance;
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point + RearLeftWheelCollider.transform.up * (CorrespondingGroundHit.force / rigid.mass), extension <= 0.0 ? Color.magenta : Color.white);
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - RearLeftWheelCollider.transform.forward * CorrespondingGroundHit.forwardSlip, Color.green);
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - RearLeftWheelCollider.transform.right * CorrespondingGroundHit.sidewaysSlip, Color.red);
         }
     }else{
         RearLeftWheelTransform.transform.position = ColliderCenterPointRL - (RearLeftWheelCollider.transform.up * RearLeftWheelCollider.suspensionDistance) * transform.localScale.y;
     }

     RearLeftWheelTransform.transform.rotation = RearLeftWheelCollider.transform.rotation * Quaternion.Euler( _rotationValueRL, 0, RearLeftWheelCollider.transform.rotation.z);
     _rotationValueRL += RearLeftWheelCollider.rpm * ( 6 ) * Time.deltaTime;
     
     
     //Rear Right Wheel Transform.
     Vector3 ColliderCenterPointRR = RearRightWheelCollider.transform.TransformPoint( RearRightWheelCollider.center );
     RearRightWheelCollider.GetGroundHit( out CorrespondingGroundHit );
     
     if ( Physics.Raycast( ColliderCenterPointRR, -RearRightWheelCollider.transform.up, out hit, (RearRightWheelCollider.suspensionDistance + RearRightWheelCollider.radius) * transform.localScale.y ) ) {
         if(hit.transform.gameObject.layer != LayerMask.NameToLayer("Vehicle")){
             RearRightWheelTransform.transform.position = hit.point + (RearRightWheelCollider.transform.up * RearRightWheelCollider.radius) * transform.localScale.y;
             float extension = (-RearRightWheelCollider.transform.InverseTransformPoint(CorrespondingGroundHit.point).y - RearRightWheelCollider.radius) / RearRightWheelCollider.suspensionDistance;
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point + RearRightWheelCollider.transform.up * (CorrespondingGroundHit.force / rigid.mass), extension <= 0.0 ? Color.magenta : Color.white);
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - RearRightWheelCollider.transform.forward * CorrespondingGroundHit.forwardSlip, Color.green);
             Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - RearRightWheelCollider.transform.right * CorrespondingGroundHit.sidewaysSlip, Color.red);
         }
     }else{
         RearRightWheelTransform.transform.position = ColliderCenterPointRR - (RearRightWheelCollider.transform.up * RearRightWheelCollider.suspensionDistance) * transform.localScale.y;
     }

     RearRightWheelTransform.transform.rotation = RearRightWheelCollider.transform.rotation * Quaternion.Euler( _rotationValueRR, 0, RearRightWheelCollider.transform.rotation.z);
     _rotationValueRR += RearRightWheelCollider.rpm * ( 6 ) * Time.deltaTime;

     //Extra Wheels Transforms.
     if(ExtraRearWheelsCollider.Length > 0){
         
         for(int i = 0; i < ExtraRearWheelsCollider.Length; i++){
             
             Vector3 ColliderCenterPointExtra = ExtraRearWheelsCollider[i].transform.TransformPoint( ExtraRearWheelsCollider[i].center );
             
             if ( Physics.Raycast( ColliderCenterPointExtra, -ExtraRearWheelsCollider[i].transform.up, out hit, (ExtraRearWheelsCollider[i].suspensionDistance + ExtraRearWheelsCollider[i].radius) * transform.localScale.y ) ) {
                 ExtraRearWheelsTransform[i].transform.position = hit.point + (ExtraRearWheelsCollider[i].transform.up * ExtraRearWheelsCollider[i].radius) * transform.localScale.y;
             }else{
                 ExtraRearWheelsTransform[i].transform.position = ColliderCenterPointExtra - (ExtraRearWheelsCollider[i].transform.up * ExtraRearWheelsCollider[i].suspensionDistance) * transform.localScale.y;
             }
             ExtraRearWheelsTransform[i].transform.rotation = ExtraRearWheelsCollider[i].transform.rotation * Quaternion.Euler( rotationValueExtra[i], 0, ExtraRearWheelsCollider[i].transform.rotation.z);
             rotationValueExtra[i] += ExtraRearWheelsCollider[i].rpm * ( 6 ) * Time.deltaTime;
             
         }
         
     }
     
     //Driver SteeringWheel Transform.
     if(SteeringWheel)
         SteeringWheel.transform.rotation = transform.rotation * Quaternion.Euler(20, 0, (FrontLeftWheelCollider.steerAngle) * -6);
     
 }
 
 public void WheelCamber (){
     
     WheelHit CorrespondingGroundHit;
     
     FrontLeftWheelCollider.GetGroundHit(out CorrespondingGroundHit); 
     float FLHandling = Mathf.Lerp (-1, 1, CorrespondingGroundHit.force / 8000f);
     FrontRightWheelCollider.GetGroundHit(out CorrespondingGroundHit); 
     float FRHandling = Mathf.Lerp (-1, 1, CorrespondingGroundHit.force / 8000f);
     RearLeftWheelCollider.GetGroundHit(out CorrespondingGroundHit); 
     float RLHandling = Mathf.Lerp (-1, 1, CorrespondingGroundHit.force / 8000f);
     RearRightWheelCollider.GetGroundHit(out CorrespondingGroundHit); 
     float RRHandling = Mathf.Lerp (-1, 1, CorrespondingGroundHit.force / 8000f);
     
     FrontLeftWheelCollider.transform.localEulerAngles = new Vector3(FrontLeftWheelCollider.transform.localEulerAngles.x, FrontLeftWheelCollider.transform.localEulerAngles.y, (-FLHandling));
     FrontRightWheelCollider.transform.localEulerAngles = new Vector3(FrontRightWheelCollider.transform.localEulerAngles.x, FrontRightWheelCollider.transform.localEulerAngles.y, (FRHandling));
     RearLeftWheelCollider.transform.localEulerAngles = new Vector3(RearLeftWheelCollider.transform.localEulerAngles.x, RearLeftWheelCollider.transform.localEulerAngles.y, (-RLHandling));
     RearRightWheelCollider.transform.localEulerAngles = new Vector3(RearRightWheelCollider.transform.localEulerAngles.x, RearRightWheelCollider.transform.localEulerAngles.y, (RRHandling));
     
 }
 
 public void DashboardGUI (){

     if(_dashboardType == DashboardType.NGUIDashboard){
     
         if(!UIInputs){
             Debug.LogError("If you gonna use NGUI Dashboard, your NGUI Root must have ''RCCNGUIDashboardInputs''. First be sure your NGUI Root has ''RCCNGUIDashboardInputs.cs''.");
             dashBoard = false;
             return;
         }
         
         UIInputs.RPM = engineRPM;
         UIInputs.KMH = speed;
         UIInputs.Gear = FrontLeftWheelCollider.rpm > -10 ? currentGear : -1f;
         
         RPMNeedleRotation = Mathf.Lerp (minimumRPMNeedleAngle, maximumRPMNeedleAngle, (engineRPM - minEngineRPM / 1.5f) / (maxEngineRPM + minEngineRPM));
         KMHNeedleRotation = Mathf.Lerp (minimumKMHNeedleAngle, maximumKMHNeedleAngle, speed / maxspeed);
         smoothedNeedleRotation = Mathf.Lerp (smoothedNeedleRotation, RPMNeedleRotation, Time.deltaTime * 5);
         
         RPMNeedleNGUI.transform.eulerAngles = new Vector3(RPMNeedleNGUI.transform.eulerAngles.x ,RPMNeedleNGUI.transform.eulerAngles.y, -smoothedNeedleRotation);
         KMHNeedleNGUI.transform.eulerAngles = new Vector3(KMHNeedleNGUI.transform.eulerAngles.x ,KMHNeedleNGUI.transform.eulerAngles.y, -KMHNeedleRotation);

     }

     if(_dashboardType == DashboardType.UIDashboard){
         
         if(!UIInputs){
             Debug.LogError("If you gonna use UI Dashboard, your Canvas Root must have ''RCCUIDashboardInputs''. First be sure your Canvas Root has ''RCCUIDashboardInputs.cs''.");
             dashBoard = false;
             return;
         }
         
         UIInputs.RPM = engineRPM;
         UIInputs.KMH = speed;
         UIInputs.Gear = FrontLeftWheelCollider.rpm > -10 ? currentGear : -1f;
         
         RPMNeedleRotation = Mathf.Lerp (minimumRPMNeedleAngle, maximumRPMNeedleAngle, (engineRPM - minEngineRPM / 1.5f) / (maxEngineRPM + minEngineRPM));
         KMHNeedleRotation = Mathf.Lerp (minimumKMHNeedleAngle, maximumKMHNeedleAngle, speed / maxspeed);
         smoothedNeedleRotation = Mathf.Lerp (smoothedNeedleRotation, RPMNeedleRotation, Time.deltaTime * 5);
         
         RPMNeedle.transform.eulerAngles = new Vector3(RPMNeedle.transform.eulerAngles.x ,RPMNeedle.transform.eulerAngles.y, -smoothedNeedleRotation);
         KMHNeedle.transform.eulerAngles = new Vector3(KMHNeedle.transform.eulerAngles.x ,KMHNeedle.transform.eulerAngles.y, -KMHNeedleRotation);
         
     }
     
 }
 
 public void SmokeWeedEveryday () {

     for(int i = 0; i < allWheelColliders.Length; i++){

         WheelHit CorrespondingGroundHit;
         allWheelColliders[i].GetGroundHit(out CorrespondingGroundHit);

         if(_wheelParticles.Count > 0){

             if(Mathf.Abs(CorrespondingGroundHit.sidewaysSlip) > .25f || Mathf.Abs(CorrespondingGroundHit.forwardSlip) > .5f){
                 if(!_wheelParticles[i].enableEmission && speed > 1)
                 _wheelParticles[i].enableEmission = true;
             }else{
                 if(_wheelParticles[i].enableEmission)
                     _wheelParticles[i].enableEmission = false;
             }

         }

     }
     
     if(exhaustGas.Length > 0 && canControl){
         foreach(ParticleSystem p in exhaustGas){
             if(speed < 20){
                 if(!p.enableEmission)
                     p.enableEmission = true;
                 if(motorInput > .05f)
                     p.emissionRate = 10;
                 else
                     p.emissionRate = 4;
             }else{
                 if(p.enableEmission)
                     p.enableEmission = false;
             }
         }
     }else if(exhaustGas.Length > 0){
         foreach(ParticleSystem p in exhaustGas){
             if(p.enableEmission)
                 p.enableEmission = false;
         }
     }
     
 }
 
 public void SkidAudio (){

     if(!skidSound)
         return;
     
     WheelHit CorrespondingGroundHitF;
     FrontRightWheelCollider.GetGroundHit( out CorrespondingGroundHitF );
     
     WheelHit CorrespondingGroundHitR;
     RearRightWheelCollider.GetGroundHit( out CorrespondingGroundHitR );
     
     if(Mathf.Abs(CorrespondingGroundHitF.sidewaysSlip) > .25f || Mathf.Abs(CorrespondingGroundHitR.sidewaysSlip) > .25f || Mathf.Abs(CorrespondingGroundHitF.forwardSlip) > .7f || Mathf.Abs(CorrespondingGroundHitR.forwardSlip) > .7f){
         if(rigid.velocity.magnitude > 1f)
             skidSound.volume = Mathf.Clamp((Mathf.Abs(CorrespondingGroundHitF.sidewaysSlip) + Mathf.Abs(CorrespondingGroundHitR.sidewaysSlip) / 5f) + Mathf.Abs(CorrespondingGroundHitF.forwardSlip) + Mathf.Abs(CorrespondingGroundHitR.forwardSlip), 0, 1f);
         else
             skidSound.volume -= Time.deltaTime;
     }else{
         skidSound.volume -= Time.deltaTime;
     }

 }
 
 public void ResetCar (){
     
     if(speed < 5 && !rigid.isKinematic){
         
         if(transform.eulerAngles.z < 300 && transform.eulerAngles.z > 60){
             resetTime += Time.deltaTime;
             if(resetTime > 3){
                 transform.rotation = Quaternion.identity;
                 transform.position = new Vector3(transform.position.x, transform.position.y + 3, transform.position.z);
                 resetTime = 0f;
             }
         }
         
         if(transform.eulerAngles.x < 300 && transform.eulerAngles.x > 60){
             resetTime += Time.deltaTime;
             if(resetTime > 3){
                 transform.rotation = Quaternion.identity;
                 transform.position = new Vector3(transform.position.x, transform.position.y + 3, transform.position.z);
                 resetTime = 0f;
             }
         }
         
     }
     
 }
 
 void OnCollisionEnter (Collision collision){
     
     if (collision.contacts.Length > 0){
         
         if(collision.relativeVelocity.magnitude > collisionForceLimit && crashClips.Length > 0){
             
             if (collision.contacts[0].thisCollider.gameObject.transform != transform.parent){

                 crashSound = CreateAudioSource("Crash Sound AudioSource", 5, 1, crashClips[UnityEngine.Random.Range(0, crashClips.Length)], false, true, true);
                 
             }
             
         }
         
     }
     
 }
 
 public void Chassis (){

     rigid.centerOfMass = new Vector3((COM.localPosition.x) * transform.localScale.x , (COM.localPosition.y) * transform.localScale.y , (COM.localPosition.z) * transform.localScale.z);

     verticalLean = Mathf.Clamp(Mathf.Lerp (verticalLean, rigid.angularVelocity.x * chassisVerticalLean, Time.deltaTime * 3f), -3.0f, 3.0f);

     WheelHit CorrespondingGroundHit;
     RearRightWheelCollider.GetGroundHit(out CorrespondingGroundHit);

     float normalizedLeanAngle = Mathf.Clamp(CorrespondingGroundHit.sidewaysSlip, -1f, 1f);

     if(normalizedLeanAngle > 0f)
         normalizedLeanAngle = 1;
     else
         normalizedLeanAngle = -1;

     if(transform.InverseTransformDirection(rigid.velocity).z >= 0)
         horizontalLean = Mathf.Clamp(Mathf.Lerp (horizontalLean, (transform.InverseTransformDirection(rigid.angularVelocity).y) * chassisHorizontalLean, Time.deltaTime * 3f), -3.0f, 3.0f);
     else
         horizontalLean = Mathf.Clamp(Mathf.Lerp (horizontalLean, (Mathf.Abs (transform.InverseTransformDirection(rigid.angularVelocity).y) * -normalizedLeanAngle) * chassisHorizontalLean, Time.deltaTime * 3f), -3.0f, 3.0f);

     if(float.IsNaN(verticalLean) || float.IsNaN(horizontalLean) || float.IsInfinity(verticalLean) || float.IsInfinity(horizontalLean))
         return;

     Quaternion target = Quaternion.Euler(verticalLean, chassis.transform.localRotation.y + (rigid.angularVelocity.z), horizontalLean);
     chassis.transform.localRotation = target;

 }
 
 public void Lights (){
     
     float brakeLightInput;
     brakeLightInput = Mathf.Clamp(-motorInput * 2, 0.0f, 1.0f);
     
     if(Input.GetKeyDown(KeyCode.L)){
         headLightsOn = !headLightsOn;
     }
     
     for(int i = 0; i < brakeLights.Length; i++){
         
         if(!reversing)
             brakeLights[i].intensity = brakeLightInput;
         else
             brakeLights[i].intensity = 0f;
         
     }
     
     for(int i = 0; i < headLights.Length; i++){
         
         if(headLightsOn)
             headLights[i].enabled = true;
         else
             headLights[i].enabled = false;
         
     }
     
     for(int i = 0; i < reverseLights.Length; i++){
         
         if(!reversing)
             reverseLights[i].intensity = Mathf.Lerp (reverseLights[i].intensity, 0.0f, Time.deltaTime*5);
         else
             reverseLights[i].intensity = brakeLightInput;
         
     }
     
 }
 
 void OnGUI (){

     GUI.skin.label.fontSize = 12;
     GUI.skin.box.fontSize = 12;
     Matrix4x4 orgRotation = GUI.matrix;
     
     if(canControl){
         
         if(useAccelerometerForSteer && mobileController){
             if(_mobileControllerType == MobileGUIType.NGUIController){
                 leftArrow.gameObject.SetActive(false);
                 rightArrow.gameObject.SetActive(false);
                 handbrakeGui.gameObject.SetActive(true);
                 brakePedal.transform.position = leftArrow.transform.position;
             }
             if(_mobileControllerType == MobileGUIType.UIController){
                 leftArrowUI.gameObject.SetActive(false);
                 rightArrowUI.gameObject.SetActive(false);
                 handbrakeUI.gameObject.SetActive(true);
                 brakePedalUI.transform.position = leftArrowUI.transform.position;
             }
             steeringWheelControl = false;
         }else if(mobileController){
             if(_mobileControllerType == MobileGUIType.NGUIController){
                 gasPedal.gameObject.SetActive(true);
                 leftArrow.gameObject.SetActive(true);
                 rightArrow.gameObject.SetActive(true);
                 handbrakeGui.gameObject.SetActive(true);
                 brakePedal.transform.position = defbrakePedalPosition;
             }
             if(_mobileControllerType == MobileGUIType.UIController){
                 gasPedalUI.gameObject.SetActive(true);
                 leftArrowUI.gameObject.SetActive(true);
                 rightArrowUI.gameObject.SetActive(true);
                 handbrakeUI.gameObject.SetActive(true);
                 brakePedalUI.gameObject.SetActive(true);
                 brakePedalUI.transform.position = defbrakePedalPosition;
             }
         }
         
         if(steeringWheelControl && mobileController){

             if(_mobileControllerType == MobileGUIType.NGUIController){
                 leftArrow.gameObject.SetActive(false);
                 rightArrow.gameObject.SetActive(false);
             }
             if(_mobileControllerType == MobileGUIType.UIController){
                 leftArrowUI.gameObject.SetActive(false);
                 rightArrowUI.gameObject.SetActive(false);
             }

             GUIUtility.RotateAroundPivot( -steeringWheelsteerAngle , steeringWheelTextureRect.center + steeringWheelPivotPos );
             GUI.DrawTexture( steeringWheelTextureRect, steeringWheelTexture );
             GUI.matrix = orgRotation;

         }
         
         if( demoGUI ) {

             GUI.backgroundColor = Color.black;
             float guiWidth = Screen.width/2 - 200;
             
             GUI.Box(new Rect(Screen.width-410 - guiWidth, 10, 400, 220), "");
             GUI.Label(new Rect(Screen.width-400 - guiWidth, 10, 400, 150), "Engine RPM : " + Mathf.CeilToInt(engineRPM));
             GUI.Label(new Rect(Screen.width-400 - guiWidth, 30, 400, 150), "speed : " + Mathf.CeilToInt(speed));
             GUI.Label(new Rect(Screen.width-400 - guiWidth, 190, 400, 150), "Horizontal Tilt : " + Input.acceleration.x);
             GUI.Label(new Rect(Screen.width-400 - guiWidth, 210, 400, 150), "Vertical Tilt : " + Input.acceleration.y);
             if(_wheelTypeChoise == WheelType.FWD){
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 50, 400, 150), "Left Wheel RPM : " + Mathf.CeilToInt(FrontLeftWheelCollider.rpm));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 70, 400, 150), "Right Wheel RPM : " + Mathf.CeilToInt(FrontRightWheelCollider.rpm));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 90, 400, 150), "Left Wheel Torque : " + Mathf.CeilToInt(FrontLeftWheelCollider.motorTorque));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 110, 400, 150), "Right Wheel Torque : " + Mathf.CeilToInt(FrontRightWheelCollider.motorTorque));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 130, 400, 150), "Left Wheel brake : " + Mathf.CeilToInt(FrontLeftWheelCollider.brakeTorque));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 150, 400, 150), "Right Wheel brake : " + Mathf.CeilToInt(FrontRightWheelCollider.brakeTorque));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 170, 400, 150), "Steer Angle : " + Mathf.CeilToInt(FrontLeftWheelCollider.steerAngle));
             }
             if(_wheelTypeChoise == WheelType.RWD || _wheelTypeChoise == WheelType.AWD){
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 50, 400, 150), "Left Wheel RPM : " + Mathf.CeilToInt(RearLeftWheelCollider.rpm));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 70, 400, 150), "Right Wheel RPM : " + Mathf.CeilToInt(RearRightWheelCollider.rpm));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 90, 400, 150), "Left Wheel Torque : " + Mathf.CeilToInt(RearLeftWheelCollider.motorTorque));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 110, 400, 150), "Right Wheel Torque : " + Mathf.CeilToInt(RearRightWheelCollider.motorTorque));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 130, 400, 150), "Left Wheel brake : " + Mathf.CeilToInt(RearLeftWheelCollider.brakeTorque));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 150, 400, 150), "Right Wheel brake : " + Mathf.CeilToInt(RearRightWheelCollider.brakeTorque));
                 GUI.Label(new Rect(Screen.width-400 - guiWidth, 170, 400, 150), "Steer Angle : " + Mathf.CeilToInt(FrontLeftWheelCollider.steerAngle));
             }
             
             GUI.backgroundColor = Color.blue;
             GUI.Button (new Rect(Screen.width-30 - guiWidth, 165, 10, Mathf.Clamp((-motorInput * 100), -100, 0)), "");

             if(mobileController){

                 if(GUI.Button(new Rect(Screen.width - 275, 200, 250, 50), "Use Accelerometer \n For Steer")){
                     if(useAccelerometerForSteer)
                         useAccelerometerForSteer = false;
                     else useAccelerometerForSteer = true;
                 }
                 
                 if(GUI.Button(new Rect(Screen.width - 275, 275, 250, 50), "Use Steering Wheel")){
                     if(steeringWheelControl)
                         steeringWheelControl = false;
                     else steeringWheelControl = true;
                 }

             }
             
             GUI.backgroundColor = Color.red;
             GUI.Button (new Rect(Screen.width-45 - guiWidth, 165, 10, Mathf.Clamp((motorInput * 100), -100, 0)), "");
             
         }
         
     }
     
 }
 

}

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
â–¼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

1 Reply

· Add your reply
  • Sort: 
avatar image
0
Best Answer

Answer by Luffyhead12 · Mar 04, 2016 at 11:15 AM

Fixed it by simply reimporting my project, not sure what went wrong and where, but I've answered this myself at the beginning. Simply duplicate your player script, set the camera width and height and change your class to "Classname1" ( As the script will be. ) Also named the Horizontal and Vertical controls to "Horizontal1" and "Vertical1" Allowing me control of both cars simultaneously using different controls ( Works with 360 gamepad too now. )

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
â–¼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

43 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

How To change a Text Object's Color Randomly using Color 32? 2 Answers

Please Help With Script 1 Answer

How to create a mesh at a location with code? 1 Answer

Continuing a Dialogue 0 Answers

Disable script after time 1 Answer


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges