Instantiateing Objects After Certain Amount Of Time

Your WaitForSeconds routine is not actually waiting for seconds before setting cooldown to false. The entire while loop is executing in one frame, meaning that cooldown is getting set to true and false in a single frame. This leads to the “spawn every frame” behavior you’re seeing.

It appears that you’re trying to do something akin to a Coroutine without actually using a Coroutine. The Coroutine version of your code looks something like this:

// Start, not Update!
void Start () {
  StartCoroutine(SpawnCar());
}

IEnumerator SpawnCar () {
  while( true ) {
    // spawn the car
    /* omitted for brevity */
    // wait to spawn the next car
    yield return new WaitForSeconds(UnityEngine.Random.Range(8,11));
  }
}

Also, please use code tags in the future. It is a lot more difficult to read code when it is pasted directly into the forum post.