IndexOutOfRangeException: Array index is out of range. (711773)

Help erro!!

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

[RequireComponent (typeof(Rigidbody))]

public class RMCRealisticMotorcycleController : MonoBehaviour {

    private Rigidbody rigid;

    public bool InputOn;
    public WheelCollider FrontWheelCollider;
    public WheelCollider RearWheelCollider;
    public Transform FrontWheelTransform;
    public Transform RearWheelTransform;
    public Transform Fender;
    public Transform SteeringHandlebar;
    public Transform COM;

    //Gearbox
    public bool changingGear = false;
    public float gearShiftRate = 10.0f;
    [HideInInspector]
    public float[] gearSpeed;
    public int currentGear;
    public int totalGears = 6;
    private int _totalGears
    {
        get
        {
            return totalGears - 1;
        }
    }

    //Bike Body Lean
    public GameObject chassis;
    public float chassisVerticalLean = 4.0f;
    public float chassisHorizontalLean = 4.0f;
    private float horizontalLean = 0.0f;
    private float verticalLean = 0.0f;

    //Configurations
    [HideInInspector]
    public AnimationCurve[] engineTorqueCurve;
    public float EngineTorque  = 1500f;
    public float MaxEngineRPM  = 6000f;
    public float MinEngineRPM  = 1000f;
    public float SteerAngle = 40f;
    [HideInInspector]
    public float Speed;
    public float highSpeedSteerAngle = 5f;
    public float highSpeedSteerAngleAtSpeed = 80f;
    public float maxSpeed = 180f;
    public float Brake = 2500f;

    private float EngineRPM = 0f;
    private float defsteerAngle = 0f;
    private float RotationValue1 = 0f;
    private float RotationValue2 = 0f;
    [HideInInspector]
    public bool brakingNow = false;
    [HideInInspector]
    public float steerInput;
    public float motorInput;
    [HideInInspector]
    public bool crashed = false;
    private bool reversing = false;

    //Audio
    private AudioSource engineStartAudio;
    public AudioClip engineStartClip;
    private AudioSource engineAudio;
    public AudioClip engineClip;
    private AudioSource skidAudio;
    public AudioClip skidClip;
    private AudioSource crashAudio;
    public AudioClip[] crashClips;
    private AudioSource gearShiftingSound;
    public AudioClip[] gearShiftingClips;

    //Particles
    public GameObject WheelSlipPrefab;
    private List <GameObject> WheelParticles = new List<GameObject>();
    public ParticleEmitter[] normalExhaustGas;
    public ParticleEmitter[] heavyExhaustGas;


    void Start (){

        SoundsInitialize();
        if(WheelSlipPrefab)
            SmokeInit();

        //Rigidbody
        rigid = GetComponent<Rigidbody>();
        rigid.constraints = RigidbodyConstraints.FreezeRotationZ;
        rigid.centerOfMass = new Vector3(COM.localPosition.x * transform.localScale.x , COM.localPosition.y * transform.localScale.y , COM.localPosition.z * transform.localScale.z);
        rigid.maxAngularVelocity = 2f;

        defsteerAngle = SteerAngle;

    }

    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 SoundsInitialize (){
       
        engineAudio = CreateAudioSource("engineSound", 5, 0, engineClip, true, true, false);
        skidAudio = CreateAudioSource("skidSound", 5, 0, skidClip, true, true, false);
        engineStartAudio = CreateAudioSource("engineStartSound", 5, .7f, engineStartClip, false, true, true);
       
    }

    public void SmokeInit (){
       
        string wheelSlipPrefabName = WheelSlipPrefab.name+"(Clone)";
       
        for(int i = 0; i < 2; i++){
            Instantiate(WheelSlipPrefab, transform.position, transform.rotation);
        }
       
        foreach(GameObject go in GameObject.FindObjectsOfType(typeof(GameObject)))
        {
            if(go.name == wheelSlipPrefabName)
                WheelParticles.Add (go);
        }
       
        WheelParticles[0].transform.position = FrontWheelCollider.transform.position;
        WheelParticles[1].transform.position = RearWheelCollider.transform.position;
       
        WheelParticles[0].transform.parent = FrontWheelCollider.transform;
        WheelParticles[1].transform.parent = RearWheelCollider.transform;
       
    }
   
    void FixedUpdate (){

        Inputs();
        Engine();
        Braking();
        ShiftGears();
        SkidAudio();
        Smoke();

    }

    void Update(){

        WheelAlign();
        Lean();

    }

    void Inputs (){

        Speed = rigid.velocity.magnitude * 3.6f;

        //Freezing rotation by Z axis.
        transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, 0f);

        //If crashed...
        if (InputOn) {
            if (!crashed) {
                if (!changingGear) {
                    motorInput = Input.GetAxis ("Vertical");
                } else {
                    motorInput = Mathf.Clamp (Input.GetAxis ("Vertical"), -1f, 0f);
                }
                    steerInput = Input.GetAxis ("Horizontal");
            } else {
                motorInput = 0f;
                steerInput = 0f;
            }
        }
        //Reverse bool
        if(motorInput < 0f  && transform.InverseTransformDirection(rigid.velocity).z < 0f)
        {
            reversing = true;
        }
        else
        {
            reversing = false;
        }
    }

    void Engine (){
       
        //Steer Limit.
        SteerAngle = Mathf.Lerp(defsteerAngle, highSpeedSteerAngle, (Speed / highSpeedSteerAngleAtSpeed));
        FrontWheelCollider.steerAngle = SteerAngle * steerInput;

        //Engine RPM.
        EngineRPM = Mathf.Clamp((((Mathf.Abs((FrontWheelCollider.rpm + RearWheelCollider.rpm)) * gearShiftRate) + MinEngineRPM)) / (currentGear + 1), MinEngineRPM, MaxEngineRPM);
       
        //Engine Audio Volume.
        engineAudio.volume = Mathf.Lerp (engineAudio.volume, Mathf.Clamp (motorInput, .35f, .85f), Time.deltaTime*  5);
        engineAudio.pitch = Mathf.Lerp ( engineAudio.pitch, Mathf.Lerp (1f, 2f, (EngineRPM - (MinEngineRPM / 1.5f)) / (MaxEngineRPM + MinEngineRPM)), Time.deltaTime * 5);
       
        if(engineStartAudio)
            engineStartAudio.GetComponent<AudioSource>().volume -= Time.deltaTime / 5f;

        // Applying Motor Torque.
        if(Speed > maxSpeed){
            RearWheelCollider.motorTorque = 0;
        }else if(!reversing && !changingGear){
            RearWheelCollider.motorTorque = EngineTorque  * Mathf.Clamp(motorInput, 0f, 1f) * engineTorqueCurve[currentGear].Evaluate(Speed);
        }
       
        if(reversing){
            if(Speed < 10){
                RearWheelCollider.motorTorque = (EngineTorque  * motorInput) / 5f;
            }else{
                RearWheelCollider.motorTorque = 0;
            }
        }
       
    }

    public void Braking (){
           
        // Deceleration.
        if(Mathf.Abs (motorInput) <= .05f){
            brakingNow = false;
            FrontWheelCollider.brakeTorque = (Brake) / 25f;
            RearWheelCollider.brakeTorque = (Brake) / 25f;
        }else if(motorInput < 0 && !reversing){
            brakingNow = true;
            FrontWheelCollider.brakeTorque = (Brake) * (Mathf.Abs(motorInput) / 5f);
            RearWheelCollider.brakeTorque = (Brake) * (Mathf.Abs(motorInput ));
        }else{
            brakingNow = false;
            FrontWheelCollider.brakeTorque = 0;
            RearWheelCollider.brakeTorque = 0;
        }
       
    }

    void WheelAlign (){

        RaycastHit hit;
        WheelHit CorrespondingGroundHit;
        float extension_F;
        float extension_R;

        Vector3 ColliderCenterPointFL = FrontWheelCollider.transform.TransformPoint( FrontWheelCollider.center );
        FrontWheelCollider.GetGroundHit( out CorrespondingGroundHit );

        if ( Physics.Raycast( ColliderCenterPointFL, -FrontWheelCollider.transform.up, out hit, (FrontWheelCollider.suspensionDistance + FrontWheelCollider.radius) * transform.localScale.y) ) {
            if(hit.transform.gameObject.layer != LayerMask.NameToLayer("Bike")){
                FrontWheelTransform.transform.position = hit.point + (FrontWheelCollider.transform.up * FrontWheelCollider.radius) * transform.localScale.y;
                if(Fender)
                    Fender.transform.position = hit.point + (FrontWheelCollider.transform.up * (FrontWheelCollider.radius + FrontWheelCollider.suspensionDistance)) * transform.localScale.y;
                extension_F = (-FrontWheelCollider.transform.InverseTransformPoint(CorrespondingGroundHit.point).y - FrontWheelCollider.radius) / FrontWheelCollider.suspensionDistance;
                Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point + FrontWheelCollider.transform.up * (CorrespondingGroundHit.force / 8000), extension_F <= 0.0f ? Color.magenta : Color.white);
                Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - FrontWheelCollider.transform.forward * CorrespondingGroundHit.forwardSlip, Color.green);
                Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - FrontWheelCollider.transform.right * CorrespondingGroundHit.sidewaysSlip, Color.red);
            }
        }else{
            FrontWheelTransform.transform.position = ColliderCenterPointFL - (FrontWheelCollider.transform.up * FrontWheelCollider.suspensionDistance) * transform.localScale.y;
        }
        RotationValue1 += FrontWheelCollider.rpm * ( 6 ) * Time.deltaTime;
        FrontWheelTransform.transform.rotation = FrontWheelCollider.transform.rotation * Quaternion.Euler( RotationValue1, FrontWheelCollider.steerAngle, FrontWheelCollider.transform.rotation.z);

        Vector3 ColliderCenterPointRL = RearWheelCollider.transform.TransformPoint( RearWheelCollider.center );
        RearWheelCollider.GetGroundHit( out CorrespondingGroundHit );

        if ( Physics.Raycast( ColliderCenterPointRL, -RearWheelCollider.transform.up, out hit, (RearWheelCollider.suspensionDistance + RearWheelCollider.radius) * transform.localScale.y) ) {
            if(hit.transform.gameObject.layer != LayerMask.NameToLayer("Bike")){
                RearWheelTransform.transform.position = hit.point + (RearWheelCollider.transform.up * RearWheelCollider.radius) * transform.localScale.y;
                extension_R = (-RearWheelCollider.transform.InverseTransformPoint(CorrespondingGroundHit.point).y - RearWheelCollider.radius) / RearWheelCollider.suspensionDistance;
                Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point + RearWheelCollider.transform.up * (CorrespondingGroundHit.force / 8000), extension_R <= 0.0f ? Color.magenta : Color.white);
                Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - RearWheelCollider.transform.forward * CorrespondingGroundHit.forwardSlip, Color.green);
                Debug.DrawLine(CorrespondingGroundHit.point, CorrespondingGroundHit.point - RearWheelCollider.transform.right * CorrespondingGroundHit.sidewaysSlip, Color.red);
            }
        }else{
            RearWheelTransform.transform.position = ColliderCenterPointRL - (RearWheelCollider.transform.up * RearWheelCollider.suspensionDistance) * transform.localScale.y;
        }
        RotationValue2 += RearWheelCollider.rpm * ( 6 ) * Time.deltaTime;
        RearWheelTransform.transform.rotation = RearWheelCollider.transform.rotation * Quaternion.Euler( RotationValue2, RearWheelCollider.steerAngle, RearWheelCollider.transform.rotation.z);

        //Steering Wheel and Fender transforms
        if(SteeringHandlebar)
            SteeringHandlebar.transform.rotation = FrontWheelCollider.transform.rotation * Quaternion.Euler( 0, FrontWheelCollider.steerAngle, FrontWheelCollider.transform.rotation.z);
        if(Fender)
            Fender.rotation = FrontWheelCollider.transform.rotation * Quaternion.Euler( 0, FrontWheelCollider.steerAngle, FrontWheelCollider.transform.rotation.z);

    }
   
    public void ShiftGears (){
           
        if(currentGear < _totalGears && !changingGear){
            if(EngineRPM > (MaxEngineRPM - 500) && RearWheelCollider.rpm >= 0){
                StartCoroutine("ChangingGear", currentGear + 1);
            }
        }
       
        if(currentGear > 0){
            if(EngineRPM < MinEngineRPM + 500 && !changingGear){
               
                for(int i = 0; i < gearSpeed.Length; i++){
                    if(Speed > gearSpeed[i])
                        StartCoroutine("ChangingGear", i);
                }
               
            }
        }
       
    }

    IEnumerator ChangingGear(int gear){
       
        changingGear = true;
       
        if(gearShiftingClips.Length >= 1){
           
            gearShiftingSound = CreateAudioSource("gearShiftingAudio", 5f, .3f, gearShiftingClips[UnityEngine.Random.Range(0, gearShiftingClips.Length)], false, true, true);
           
        }
       
        yield return new WaitForSeconds(.5f);
        changingGear = false;
        currentGear = gear;
       
    }

    void Lean (){

        verticalLean = Mathf.Clamp(Mathf.Lerp (verticalLean, transform.InverseTransformDirection(rigid.angularVelocity).x * chassisVerticalLean, Time.deltaTime * 5f), -10.0f, 10.0f);
       
        WheelHit CorrespondingGroundHit;
        FrontWheelCollider.GetGroundHit(out CorrespondingGroundHit);
       
        float normalizedLeanAngle = Mathf.Clamp(CorrespondingGroundHit.sidewaysSlip, -1f, 1f);
       
        if(transform.InverseTransformDirection(rigid.velocity).z > 0f)
            normalizedLeanAngle = -1;
        else
            normalizedLeanAngle = 1;
       
        horizontalLean = Mathf.Clamp(Mathf.Lerp (horizontalLean, (transform.InverseTransformDirection(rigid.angularVelocity).y * normalizedLeanAngle) * chassisHorizontalLean, Time.deltaTime * 3f), -50.0f, 50.0f);
       
        Quaternion target = Quaternion.Euler(verticalLean, chassis.transform.localRotation.y + (rigid.angularVelocity.z), horizontalLean);
        chassis.transform.localRotation = target;
       
        rigid.centerOfMass = new Vector3((COM.localPosition.x) * transform.localScale.x , (COM.localPosition.y) * transform.localScale.y , (COM.localPosition.z) * transform.localScale.z);

    }

    public void Smoke () {
       
        WheelHit CorrespondingGroundHit0;
        WheelHit CorrespondingGroundHit1;
       
        if ( WheelParticles.Count > 0 ) {
           
            FrontWheelCollider.GetGroundHit( out CorrespondingGroundHit0 );
            if(Mathf.Abs(CorrespondingGroundHit0.sidewaysSlip) > .25f || Mathf.Abs(CorrespondingGroundHit0.forwardSlip) > .5f ){
                WheelParticles[0].GetComponent<ParticleEmitter>().emit = true;
            }else{
                WheelParticles[0].GetComponent<ParticleEmitter>().emit = false;
            }
           
            RearWheelCollider.GetGroundHit( out CorrespondingGroundHit1 );
            if(Mathf.Abs(CorrespondingGroundHit1.sidewaysSlip) > .25f || Mathf.Abs(CorrespondingGroundHit1.forwardSlip) > .5f ){
                WheelParticles[1].GetComponent<ParticleEmitter>().emit = true;
            }else{
                WheelParticles[1].GetComponent<ParticleEmitter>().emit = false;
            }
           
        }
       
        if(normalExhaustGas.Length > 0){

            foreach(ParticleEmitter pe in normalExhaustGas){
                if(Speed < 20)
                    pe.emit = true;
                else
                    pe.emit = false;
            }

        }
       
        if(heavyExhaustGas.Length > 0){
           
            foreach(ParticleEmitter pe in heavyExhaustGas){
                if(Speed < 20 && motorInput > .5f)
                    pe.emit = true;
                else
                    pe.emit = false;
            }
           
        }
       
    }

    public void SkidAudio (){
       
        if(!skidAudio)
            return;
       
        WheelHit CorrespondingGroundHitF;
        FrontWheelCollider.GetGroundHit( out CorrespondingGroundHitF );
       
        WheelHit CorrespondingGroundHitR;
        RearWheelCollider.GetGroundHit( out CorrespondingGroundHitR );
       
        if(Mathf.Abs(CorrespondingGroundHitF.sidewaysSlip) > .25f || Mathf.Abs(CorrespondingGroundHitR.forwardSlip) > .5f || Mathf.Abs(CorrespondingGroundHitF.forwardSlip) > .5f){
            if(rigid.velocity.magnitude > 1f)
                skidAudio.volume = Mathf.Abs(CorrespondingGroundHitF.sidewaysSlip) + ((Mathf.Abs(CorrespondingGroundHitF.forwardSlip) + Mathf.Abs(CorrespondingGroundHitR.forwardSlip)) / 4f);
            else
                skidAudio.volume -= Time.deltaTime;
        }else{
            skidAudio.volume -= Time.deltaTime;
        }
       
    }

    void OnCollisionEnter (Collision collision){
       
        if (collision.contacts.Length > 0){
           
            if(collision.relativeVelocity.magnitude > 10 && crashClips.Length > 0){
               
                if (collision.contacts[0].thisCollider.gameObject.transform != transform.parent){
                   
                    crashAudio = CreateAudioSource("crashSound", 5, 1, crashClips[UnityEngine.Random.Range(0, crashClips.Length)], false, true, true);
                   
                }
               
            }
           
        }

        //crashed = true;
       
    }

}

engineTorqueCurve[currentGear] refers to an index that doesn’t exist. Thus “out of range”.
Now you need to figure out why it’s out of range.

So you need to look at where you’re setting the value for currentGear.

Also just wanted to highlight this bit of code that has me scratching my head:

    public int totalGears = 6;
    private int _totalGears
    {
        get
        {
            return totalGears - 1;
        }
    }

You’re just an underscore away from creating bugs.

I changed the scene to the scene, then stopped the error. thank you all the same.

sorry my inglesh bad…