Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- public class CarController : MonoBehaviour {
- public WheelCollider Wheel_FL;
- public WheelCollider Wheel_FR;
- public WheelCollider Wheel_RL;
- public WheelCollider Wheel_RR;
- public float[] GearRatio;
- public int CurrentGear;
- public float EngineTorque = 600.0f;
- public float MaxEngineRPM = 3000.0f;
- public float MinEngineRPM = 1000.0f;
- public float SteerAngle = 10f;
- public Transform COM;
- public float Speed;
- public float maxSpeed = 150f;
- public AudioSource skidAudio;
- private float EngineRPM = 0.0f;
- private float motorInput;
- void Start () {
- rigidbody.centerOfMass = new Vector3(COM.localPosition.x * transform.localScale.x, COM.localPosition.y * transform.localScale.y, COM.localPosition.z * transform.localScale.z);
- }
- void Update () {
- Speed = rigidbody.velocity.magnitude * 3.6f;
- //rigidbody.drag = rigidbody.velocity.magnitude / 100;
- EngineRPM = (Wheel_FL.rpm + Wheel_FR.rpm)/2 * GearRatio[CurrentGear];
- ShiftGears();
- //Input For MotorInput.
- motorInput = Input.GetAxis("Vertical");
- //Audio
- audio.pitch = Mathf.Abs(EngineRPM / MaxEngineRPM)/3 + .3f;
- if (audio.pitch > 2.0f) {
- audio.pitch = 2.0f;
- }
- //Steering
- Wheel_FL.steerAngle = (SteerAngle - 15*(Speed/maxSpeed)) * Input.GetAxis("Horizontal");
- Wheel_FR.steerAngle = Wheel_FL.steerAngle;
- if(Speed > maxSpeed){
- Wheel_RL.motorTorque = 0;
- Wheel_RR.motorTorque = 0;
- }else{
- Wheel_RL.motorTorque = EngineTorque / GearRatio[CurrentGear] * Input.GetAxis("Vertical") * ((maxSpeed - Speed)/maxSpeed);
- Wheel_RR.motorTorque = Wheel_RL.motorTorque;
- }
- //Input.
- if(motorInput <= 0){
- Wheel_RL.brakeTorque = 30;
- Wheel_RR.brakeTorque = 30;
- }else if (motorInput >= 0){
- Wheel_RL.brakeTorque = 0;
- Wheel_RR.brakeTorque = 0;
- }
- //SkidAudio.
- WheelHit CorrespondingGroundHit = new WheelHit();
- Wheel_RR.GetGroundHit(out CorrespondingGroundHit );
- if(Mathf.Abs(CorrespondingGroundHit.sidewaysSlip) > 10) {
- skidAudio.enabled = true;
- }else{
- skidAudio.enabled = false;
- }
- //HandBrake
- if(Input.GetButtonDown("Jump")){
- Wheel_FL.brakeTorque = 1000;
- Wheel_FR.brakeTorque = 1000;
- }
- if(Input.GetButtonUp("Jump")){
- Wheel_FL.brakeTorque = 0;
- Wheel_FR.brakeTorque = 0;
- }
- //Flip
- if(Input.GetKeyDown(KeyCode.R))
- FlipCar();
- }
- void ShiftGears() {
- if (EngineRPM >= MaxEngineRPM) {
- int AppropriateGear = CurrentGear;
- for (int i = 0; i < GearRatio.Length; i ++) {
- if(Wheel_FL.rpm * GearRatio[i] < MaxEngineRPM) {
- AppropriateGear = i;
- break;
- }
- }
- CurrentGear = AppropriateGear;
- }
- if(EngineRPM <= MinEngineRPM) {
- int AppropriateGear = CurrentGear;
- for ( int j = GearRatio.Length-1; j >= 0; j -- ) {
- if ( Wheel_FL.rpm * GearRatio[j] > MinEngineRPM ) {
- AppropriateGear = j;
- break;
- }
- }
- CurrentGear = AppropriateGear;
- }
- }
- void FlipCar()
- {
- transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, transform.eulerAngles.z+180);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement