void showBodySettings()
    {
        if (wheelTransformPanel == false)
        {
            GUILayout.BeginHorizontal();
            GUILayout.Label("Select Body Prefab       ", EditorStyles.boldLabel);
            GUILayout.Label("Select Left Wheel Prefab ", EditorStyles.boldLabel);
            GUILayout.Label("Select Right Wheel Prefab", EditorStyles.boldLabel);
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            // Body prefab
            bodyPrefab = EditorGUILayout.ObjectField(bodyPrefab, typeof(GameObject), true) as GameObject;
            if (bodyPrefab != null)
            {
                if (selectedBodyPrefab == false)
                {
                    if (GUILayout.Button("Okey"))
                    {
                        bodyPrefab = Instantiate(bodyPrefab, gm.transform.Find("Body").transform) as GameObject;
                        bodyPrefab.transform.localPosition = Vector3.zero;
                        selectedBodyPrefab = true;
                    }
                }

                if (GUILayout.Button("Edit"))
                {
                    if (selectedBodyPrefab && bodyPrefab != null)
                    {
                        DestroyImmediate(bodyPrefab);
                    }
                    selectedBodyPrefab = false;
                    bodyPrefab         = null;
                }
            }

            // Left wheel
            leftWheelPrefab = EditorGUILayout.ObjectField(leftWheelPrefab, typeof(GameObject), true) as GameObject;
            if (leftWheelPrefab != null)
            {
                if (selectedLeftWheelPrefab == false)
                {
                    if (GUILayout.Button("Okey"))
                    {
                        leftWheelObj = new GameObject[numberOfWheel / 2];
                        for (int i = 0; i < numberOfWheel / 2; i++)
                        {
                            leftWheelPrefab      = Instantiate(leftWheelPrefab, gm.transform.Find("WheelMesh").transform) as GameObject;
                            leftWheelObj[i]      = leftWheelPrefab;
                            leftWheelObj[i].name = "WheelMeshL" + i;
                        }
                        selectedLeftWheelPrefab = true;
                    }
                }

                if (GUILayout.Button("Edit"))
                {
                    if (selectedLeftWheelPrefab && leftWheelPrefab != null)
                    {
                        DestroyImmediate(leftWheelPrefab);
                        for (int i = 0; i < leftWheelObj.Length; i++)
                        {
                            DestroyImmediate(leftWheelObj[i]);
                        }
                    }
                    selectedLeftWheelPrefab = false;
                    leftWheelPrefab         = null;
                }
            }

            // Right wheel
            rightWheelPrefab = EditorGUILayout.ObjectField(rightWheelPrefab, typeof(GameObject), true) as GameObject;
            if (rightWheelPrefab != null)
            {
                if (selectedRightWheelPrefab == false)
                {
                    if (GUILayout.Button("Okey"))
                    {
                        rightWheelObj = new GameObject[numberOfWheel / 2];
                        for (int i = 0; i < numberOfWheel / 2; i++)
                        {
                            rightWheelPrefab      = Instantiate(rightWheelPrefab, gm.transform.Find("WheelMesh").transform) as GameObject;
                            rightWheelObj[i]      = rightWheelPrefab;
                            rightWheelObj[i].name = "WheelMeshR" + i;
                        }
                        selectedRightWheelPrefab = true;
                    }
                }

                if (GUILayout.Button("Edit"))
                {
                    if (selectedRightWheelPrefab && rightWheelPrefab != null)
                    {
                        DestroyImmediate(rightWheelPrefab);
                        for (int i = 0; i < rightWheelObj.Length; i++)
                        {
                            DestroyImmediate(rightWheelObj[i]);
                        }
                    }
                    selectedRightWheelPrefab = false;
                    rightWheelPrefab         = null;
                }
            }
            GUILayout.EndHorizontal();

            if (bodyPrefab != null && selectedBodyPrefab && rightWheelPrefab != null && selectedRightWheelPrefab && leftWheelPrefab != null && selectedLeftWheelPrefab)
            {
                if (GUILayout.Button("Select And Calculate Transform"))
                {
                    wheelTransformPanel = true;
                    // Estimated wheel position calculation
                    for (int i = 0; i < leftWheelObj.Length; i++)
                    {
                        leftWheelObj[leftWheelObj.Length - i - 1].transform.localPosition = new Vector3(-1, -1, i);
                    }
                    for (int i = 0; i < rightWheelObj.Length; i++)
                    {
                        rightWheelObj[rightWheelObj.Length - i - 1].transform.localPosition = new Vector3(1, -1, i);
                    }
                }
            }
        }

        if (bodyPrefab == null || rightWheelPrefab == null || leftWheelPrefab == null)
        {
            EditorGUILayout.HelpBox("Please select the objects => body,right wheel,left wheel", MessageType.Info);
            EditorGUILayout.HelpBox("Your choices should be in the form of prefab", MessageType.Warning);
            // Wheel transform kodu içerisinden çkeilde
            selectedWheelObj = new GameObject[numberOfWheel];
        }



        if (wheelTransformPanel == false)
        {
            return;
        }

        if (wheelTransformPanel)
        {
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label("Select Wheel :", EditorStyles.boldLabel);
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            for (int i = 0; i < leftWheelObj.Length; i++)
            {
                if (GUILayout.Button(leftWheelObj[i].name))
                {
                    if (selectedWheelObj[i] != leftWheelObj[i])
                    {
                        selectedWheelObj[i] = leftWheelObj[i];
                    }
                    else
                    {
                        selectedWheelObj[i] = null;
                    }
                }
            }
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            for (int i = 0; i < rightWheelObj.Length; i++)
            {
                if (GUILayout.Button(rightWheelObj[i].name))
                {
                    if (selectedWheelObj[numberOfWheel / 2 + i] != rightWheelObj[i])
                    {
                        selectedWheelObj[numberOfWheel / 2 + i] = rightWheelObj[i];
                    }
                    else
                    {
                        selectedWheelObj[numberOfWheel / 2 + i] = null;
                    }
                }
            }
            GUILayout.EndHorizontal();

            Tools.current = Tool.Move;

            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            GUILayout.Label("Tools", EditorStyles.boldLabel);
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Remove all"))
            {
                selectedWheelObj           = new GameObject[numberOfWheel];
                Selection.activeGameObject = null;
            }
            if (GUILayout.Button("Select all"))
            {
                selectedWheelObj = new GameObject[numberOfWheel];
                for (int i = 0; i < leftWheelObj.Length; i++)
                {
                    selectedWheelObj[i] = leftWheelObj[i];
                }
                for (int i = 0; i < rightWheelObj.Length; i++)
                {
                    selectedWheelObj[numberOfWheel / 2 + i] = rightWheelObj[i];
                }
            }
            GUILayout.EndHorizontal();
            Selection.objects = selectedWheelObj;
        }


        if (GUILayout.Button("Apply"))
        {
            VehicleFree gmVehicle = gm.GetComponent <VehicleFree>();
            gmVehicle.whellCols  = new WheelCollider[numberOfWheel];
            gmVehicle.whellMeshs = new Transform[numberOfWheel];

            for (int i = 0; i < numberOfWheel; i++)
            {
                gm.transform.Find("WheelCollider").GetChild(i).localPosition = gm.transform.Find("WheelMesh").GetChild(i).localPosition + new Vector3(0, 0.15f, 0);
            }

            // Adjust the left wheel
            for (int i = 0; i < numberOfWheel / 2; i++)
            {
                gmVehicle.whellCols[i * 2] = gm.transform.Find("WheelCollider").GetChild(i).GetComponent <WheelCollider>();

                gmVehicle.whellMeshs[i * 2] = gm.transform.Find("WheelMesh").GetChild(i).GetComponent <Transform>();
            }

            // Adjust the right wheel
            for (int i = numberOfWheel / 2; i < numberOfWheel; i++)
            {
                gmVehicle.whellCols[(i - numberOfWheel / 2) * 2 + 1] = gm.transform.Find("WheelCollider").GetChild(i).GetComponent <WheelCollider>();

                gmVehicle.whellMeshs[(i - numberOfWheel / 2) * 2 + 1] = gm.transform.Find("WheelMesh").GetChild(i).GetComponent <Transform>();
            }

            this.Close();
        }
    }
    void equalize()
    {
        //  This section installs the features specified in your vehicle

        gm = new GameObject();
        gm.AddComponent <Rigidbody>();
        gm.AddComponent <VehicleFree>();

        gm.GetComponent <Rigidbody>().mass = 1000;
        gm.GetComponent <Rigidbody>().drag = 0.015f;

        vehicle = gm.GetComponent <VehicleFree>();

        gm.name = vehicleName;

        vehicle.m_controlType = VehicleFree.ControlType.semi_automatic;

        switch (tractionType)
        {
        case TractionType.all_whell_drive:
            vehicle.m_tractionType = VehicleFree.TractionType.all_whell_drive;
            break;

        case TractionType.front_wheel_drive:
            vehicle.m_tractionType = VehicleFree.TractionType.front_wheel_drive;
            break;

        case TractionType.rear_wheel_drive:
            vehicle.m_tractionType = VehicleFree.TractionType.rear_wheel_drive;
            break;

        case TractionType.custom_whell_drive:
            vehicle.m_tractionType  = VehicleFree.TractionType.custom_whell_drive;
            vehicle.customWheelAxle = customTractionTypeAxle;
            break;
        }

        switch (speedType)
        {
        case SpeedType.kmh:
            vehicle.m_speedType = VehicleFree.SpeedType.kmh;
            break;

        case SpeedType.mph:
            vehicle.m_speedType = VehicleFree.SpeedType.mph;
            break;
        }

        vehicle.HP = HP;

        vehicle.motorTorqGraphic = value;

        switch (breakType)
        {
        case BreakType.all_whell_drive:
            vehicle.m_breakType = VehicleFree.BreakType.all_whell_drive;
            break;

        case BreakType.front_wheel_drive:
            vehicle.m_breakType = VehicleFree.BreakType.front_wheel_drive;
            break;

        case BreakType.rear_wheel_drive:
            vehicle.m_breakType = VehicleFree.BreakType.rear_wheel_drive;
            break;

        case BreakType.custom_whell_drive:
            vehicle.m_breakType          = VehicleFree.BreakType.custom_whell_drive;
            vehicle.customWheelAxleBreak = customBreakTypeAxle;
            break;
        }

        vehicle.breakPower = breakPower;

        vehicle.gearRatios = gearRatios;

        vehicle.maxRpm         = maxRpm;
        vehicle.startEngineRpm = startEngineRpm;

        //Center of gravty object
        GameObject centerOfGravityObj = new GameObject();

        centerOfGravityObj.name             = "CenterOfGravity";
        centerOfGravityObj.transform.parent = gm.transform;

        GameObject centerOfGravityObj_Front = new GameObject();

        centerOfGravityObj_Front.name                            = "Front";
        centerOfGravityObj_Front.transform.parent                = centerOfGravityObj.transform;
        centerOfGravityObj_Front.transform.localPosition         = new Vector3(0, -0.2f, 1);
        centerOfGravityObj_Front.AddComponent <Rigidbody>().mass = 285;
        FixedJoint cogFFJ = centerOfGravityObj_Front.AddComponent <FixedJoint>();

        cogFFJ.connectedBody = gm.GetComponent <Rigidbody>();

        GameObject centerOfGravityObj_Back = new GameObject();

        centerOfGravityObj_Back.name                            = "Back";
        centerOfGravityObj_Back.transform.parent                = centerOfGravityObj.transform;
        centerOfGravityObj_Back.transform.localPosition         = new Vector3(0, -0.2f, -1);
        centerOfGravityObj_Back.AddComponent <Rigidbody>().mass = 185;
        FixedJoint cogBFJ = centerOfGravityObj_Back.AddComponent <FixedJoint>();

        cogBFJ.connectedBody = gm.GetComponent <Rigidbody>();

        //Body object
        GameObject body = new GameObject();

        body.name             = "Body";
        body.transform.parent = gm.transform;

        //Collider object
        GameObject Collider = new GameObject();

        Collider.name             = "Collider";
        Collider.transform.parent = gm.transform;
        Collider.AddComponent <BoxCollider>();

        //Wheel collider object
        GameObject wheelCol = new GameObject();

        wheelCol.name             = "WheelCollider";
        wheelCol.transform.parent = gm.transform;

        WheelFrictionCurve wfcForward = new WheelFrictionCurve();

        wfcForward.extremumSlip   = 1f;
        wfcForward.extremumValue  = 2f;
        wfcForward.asymptoteSlip  = 2f;
        wfcForward.asymptoteValue = 1f;
        wfcForward.stiffness      = 1f;
        WheelFrictionCurve wfcSideway = new WheelFrictionCurve();

        wfcSideway.extremumSlip   = 0.5f;
        wfcSideway.extremumValue  = 1f;
        wfcSideway.asymptoteSlip  = 1f;
        wfcSideway.asymptoteValue = 0.5f;
        wfcSideway.stiffness      = 1f;

        for (int i = 0; i < numberOfWheel; i++)
        {
            GameObject wheelC = new GameObject();
            if (i >= numberOfWheel / 2)
            {
                wheelC.name = "WheelColliderR" + (i - numberOfWheel / 2);
            }
            else
            {
                wheelC.name = "WheelColliderL" + i;
            }
            wheelC.transform.parent = wheelCol.transform;
            WheelCollider wcol = wheelC.AddComponent <WheelCollider>();
            wcol.mass             = 20;
            wcol.forwardFriction  = wfcForward;
            wcol.sidewaysFriction = wfcSideway;
        }

        //Wheel mesh object
        GameObject wheelMesh = new GameObject();

        wheelMesh.name             = "WheelMesh";
        wheelMesh.transform.parent = gm.transform;
    }