Set Wheelcollider BrakeTorque to 0 does not release brake.

I have a vehicle that has three wheels. When set the brakeTorque to be a big value (30000), it brakes normally and stops the vehicle. When I set brakeTorques to be 0, it does not release the the brakes. At this time, adding a force to the rigid body won’t push the vehicle forward. I can notice that the front suspensions are pushed down but the brake is still on.

Only when I disabled Use Gravity on the rigid body and let the vehicle 's all wheel colliders be away from the ground and reenable Use Gravity, the all the brakes are released, and then the vehicle moves.

Can any one help to solve this problem?

I figured out myself.

The problem I had was because the wheel colliders’ MotorTorque were 0. In order to awake he brakes, All I did was to set MorotrTourque to be a small value (e…g. 1) in when you set BrakeTorque to be 0.

I am still facing the same issue. Could you plz also let me know what is wrong with my code?

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

[System.Serializable]
public class AxleInfo
{
public WheelCollider leftWheel;
public WheelCollider rightWheel;
public bool motor;
public bool steering;

}

public class SimpleCarController : MonoBehaviour
{
public List axleInfos;
public float maxMotorTorque;
public float maxSteeringAngle;

[SerializeField] private float currentbreakForce;
[SerializeField] private float breakForce;
[SerializeField] private bool handBreak;
[SerializeField] private float motor;


// finds the corresponding visual wheel
// correctly applies the transform
public void ApplyLocalPositionToVisuals(WheelCollider collider)
{
    if (collider.transform.childCount == 0)
    {
        return;
    }

    Transform visualWheel = collider.transform.GetChild(0);

    Vector3 position;
    Quaternion rotation;
    collider.GetWorldPose(out position, out rotation);

    visualWheel.transform.position = position;
    visualWheel.transform.rotation = rotation;
}

public void FixedUpdate()
{ 

    handBreak = false;
    
   
    float motor = maxMotorTorque * Input.GetAxis("Vertical");
    float steering = maxSteeringAngle * Input.GetAxis("Horizontal");
    handBreak = Input.GetKey(KeyCode.Space);
    
    if (handBreak)
    {
        currentbreakForce = breakForce;
        ApplyBreaking();
    }
    else
    {
        //motor = 100.0f;
        currentbreakForce = 0f;
        /*foreach (AxleInfo axleInfo in axleInfos)

        {
            axleInfo.leftWheel.motorTorque = 200.0f;
            axleInfo.rightWheel.motorTorque = 200.0f;
        }*/
    }

    foreach (AxleInfo axleInfo in axleInfos)
    {
        if (axleInfo.steering)
        {
            axleInfo.leftWheel.steerAngle = steering;
            axleInfo.rightWheel.steerAngle = steering;
        }
        if (axleInfo.motor)
        {
            axleInfo.leftWheel.motorTorque = motor;
            axleInfo.rightWheel.motorTorque = motor;
        }
        ApplyLocalPositionToVisuals(axleInfo.leftWheel);
        ApplyLocalPositionToVisuals(axleInfo.rightWheel);
    }
}
private void ApplyBreaking()
{
    foreach (AxleInfo axleInfo in axleInfos)
    {
        

        axleInfo.leftWheel.brakeTorque = currentbreakForce;
        axleInfo.rightWheel.brakeTorque = currentbreakForce;
    }
    

}

}

Your problem may be that when handBrake is false, you set currentbreakForce = 0f;, but ApplyBreaking is not called after that, which means the wheel colliders brakeTouques are not set to be 0.

You still need to uncomment this block of code to set mortorTorque values

     currentbreakForce = 0f;
    **ApplyBreaking();**
     /*foreach (AxleInfo axleInfo in axleInfos)
     {
         axleInfo.leftWheel.motorTorque = 200.0f;
         axleInfo.rightWheel.motorTorque = 200.0f;
     }*/