terça-feira, 4 de abril de 2017

Bug filho da pool!

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!!!

6 comentários:

  1. Hey! Parabéns pelo projeto do simulador, terá novos modelos de Ônibus?,como Caio Vitoria, Caio Apache Vip 4, Marcopollo Torino, e NeoBus? Quando tiver mais ficará legal!

    ResponderExcluir
  2. Se e foda mano se de da pra botar a cor do volante ficar mais forte e o painel azul fica mais forte um azul mais iscuro o painel fica mais detalhado

    ResponderExcluir
  3. Oi, quero aprender a jogar esse jogo. Tem algum tutorial nesse site?

    ResponderExcluir
  4. Quando sairá a próxima atualização?

    ResponderExcluir
  5. Olá amigo,parabéns pelo jogo!Mas como comentário pessoal eu gostaria que os ônibus pudessem ter câmbio manual com a mesma troca direta que já tem,e gostaria também de ver eles andando a mais de 50,60...Pois fica muito limitado na pista.Um forte abração pra vocês e só mais um pedido:Não pára não que com esse jogo aí vocês estão indo super bem!!!
    #Parabens!!! #PBS!!!

    ResponderExcluir