Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.11 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class CarController : MonoBehaviour {
  5.     public WheelCollider Wheel_FL;
  6.     public WheelCollider Wheel_FR;
  7.     public WheelCollider Wheel_RL;
  8.     public WheelCollider Wheel_RR;
  9.  
  10.     public float[] GearRatio;
  11.     public int CurrentGear;
  12.  
  13.     public float EngineTorque = 600.0f;
  14.  
  15.     public float MaxEngineRPM = 3000.0f;
  16.     public float MinEngineRPM = 1000.0f;
  17.  
  18.     public float SteerAngle = 10f;
  19.  
  20.     public Transform COM;
  21.  
  22.     public float Speed;
  23.  
  24.     public float maxSpeed = 150f;
  25.  
  26.     public AudioSource skidAudio;
  27.  
  28.     private float EngineRPM = 0.0f;
  29.  
  30.     private float motorInput;
  31.  
  32.     void Start () {
  33.         rigidbody.centerOfMass = new Vector3(COM.localPosition.x * transform.localScale.x, COM.localPosition.y * transform.localScale.y, COM.localPosition.z * transform.localScale.z);
  34.     }
  35.  
  36.     void Update () {
  37.         Speed = rigidbody.velocity.magnitude * 3.6f;
  38.         //rigidbody.drag = rigidbody.velocity.magnitude / 100;
  39.         EngineRPM = (Wheel_FL.rpm + Wheel_FR.rpm)/2 * GearRatio[CurrentGear];
  40.        
  41.         ShiftGears();
  42.        
  43.         //Input For MotorInput.
  44.         motorInput = Input.GetAxis("Vertical");
  45.        
  46.         //Audio
  47.         audio.pitch = Mathf.Abs(EngineRPM / MaxEngineRPM)/3 + .3f;
  48.         if (audio.pitch > 2.0f) {
  49.             audio.pitch = 2.0f;
  50.         }
  51.        
  52.         //Steering
  53.         Wheel_FL.steerAngle = (SteerAngle - 15*(Speed/maxSpeed)) * Input.GetAxis("Horizontal");
  54.         Wheel_FR.steerAngle = Wheel_FL.steerAngle;
  55.  
  56.         if(Speed > maxSpeed){
  57.             Wheel_RL.motorTorque = 0;
  58.             Wheel_RR.motorTorque = 0;
  59.         }else{
  60.             Wheel_RL.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical") * ((maxSpeed - Speed)/maxSpeed);
  61.             Wheel_RR.motorTorque = Wheel_RL.motorTorque;
  62.         }
  63.        
  64.         //Input.
  65.         if(motorInput <= 0){
  66.             Wheel_RL.brakeTorque = 30;
  67.             Wheel_RR.brakeTorque = 30;
  68.         }else if (motorInput >= 0){
  69.             Wheel_RL.brakeTorque = 0;
  70.             Wheel_RR.brakeTorque = 0;
  71.         }
  72.        
  73.         //SkidAudio.
  74.         WheelHit CorrespondingGroundHit = new WheelHit();
  75.         Wheel_RR.GetGroundHit(out CorrespondingGroundHit );
  76.         if(Mathf.Abs(CorrespondingGroundHit.sidewaysSlip) > 10) {
  77.             skidAudio.enabled = true;
  78.         }else{
  79.             skidAudio.enabled = false;
  80.         }
  81.        
  82.         //HandBrake
  83.         if(Input.GetButtonDown("Jump")){
  84.             Wheel_FL.brakeTorque = 1000;
  85.             Wheel_FR.brakeTorque = 1000;
  86.         }
  87.         if(Input.GetButtonUp("Jump")){
  88.             Wheel_FL.brakeTorque = 0;
  89.             Wheel_FR.brakeTorque = 0;
  90.         }
  91.        
  92.         //Flip
  93.         if(Input.GetKeyDown(KeyCode.R))
  94.             FlipCar();
  95.     }
  96.  
  97.     void ShiftGears() {
  98.        
  99.         if (EngineRPM >= MaxEngineRPM) {
  100.             int AppropriateGear = CurrentGear;
  101.            
  102.             for (int i = 0; i < GearRatio.Length; i ++) {
  103.                 if(Wheel_FL.rpm * GearRatio[i] < MaxEngineRPM) {
  104.                     AppropriateGear = i;
  105.                     break;
  106.                 }
  107.             }
  108.             CurrentGear = AppropriateGear;
  109.         }
  110.        
  111.         if(EngineRPM <= MinEngineRPM) {
  112.             int AppropriateGear = CurrentGear;
  113.             for ( int j = GearRatio.Length-1; j >= 0; j -- ) {
  114.                 if ( Wheel_FL.rpm * GearRatio[j] > MinEngineRPM ) {
  115.                     AppropriateGear = j;
  116.                     break;
  117.                 }
  118.             }
  119.             CurrentGear = AppropriateGear;
  120.         }
  121.     }
  122.  
  123.     void FlipCar()
  124.     {
  125.         transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z+180);
  126.     }
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement