Acho que identifiquei um dos bugs dos carros. Não todos, mas mais um! Ainda não fui testar, mas faz sentido. Vou testar AGORA!
Quando eles somem (estão longe do jogador), são desativados e voltam pra fila de carros à espera do spawn. Quando são ativados novamente, a função de inicialização é chamada, atribuindo uma velocidade levemente aleatória de acordo com a velocidade de cada carro, pré-configurada no objeto (prefab, para os íntimos da Unity). O valor alterado é com base num multiplicador. Por exemplo, a velocidade "base" do carro vezes um número aleatório entre 0.8 e 1.2 (assim uns ficam mais rápidos, outros mais lentos). Idem para a distância que ficam do carro da frente, a distância que ficam do ônibus do jogador, etc. A aleatoriedade dá um toque especial ao game, já que cada carro se comporta de um jeito diferente e não ficam alinhados iguaizinhos nas vias de várias faixas, ficando bem realista.
Aí entra o problema. Antes de usar um pool, cada carro era destruído e recriado (instanciado) com os valores padrões. Então sempre iniciavam com a velocidade "certa".
Usando o pool os carros não são destruídos/recriados, apenas ativados/desativados e reposicionados (eles somem de uma rua atrás do jogador e aparecem numa rua lá na frente). Isso é um infinitilhão de vezes melhor pro desempenho e gerenciamento de memória, especialmente no celular.
Os bugs apareceram depois do pool, que implementei em janeiro a pedido de uma empresa que contratou o código (eu ia fazer por mim mesmo mais cedo ou mais tarde, mas acabei adiantando).
E só caiu a ficha agora: embora eu desativei algumas coisas restaurando os valores padrões na ativação do carro, faltaram as coisas aleatórias. O carro vai pro pool com a velocidade e distância alteradas, e quando volta elas são multiplicadas pelo fator aleatório... E isso vai aumentando (ou reduzindo). Por isso alguns carros andam muito rápido: eles têm a velocidade base multiplicada por 1.2, 1.5, etc, sempre aumentando, a cada sumida/ativação! Enquanto outros têm a velocidade e distâncias sempre diminuindo... Até ficarem parados (o resultado de x * y, onde 0 < y < 1, tende a 0 se feito repetidas vezes!!!).
Aí está explicado: na abertura do jogo tudo funciona bem, mas alguns minutos depois tem carro voando muuuuito rápido, e outros praticamente parados, travando todo o trânsito.
Se realmente o bug for esse (só tá na minha cabeça, vou ver o código já já) o tráfego vai ganhar um grande up, aí já lanço a correção hoje mesmo!
Não vou comemorar ainda, pode ser outro bug, e podem ter mais - os que ficam girados eu ainda não entendi, não faz sentido. Mas esse é um dos piores de todos.
Aí fica a lição: se usar pool, cuidado dobrado com as variáveis que precisam ser redefinidas no OnEnable!!!