terça-feira, 11 de abril de 2017

Alguns dos próximos detalhes a serem feitos...

O game chegou numa fase bem interessante! Quase toda a programação básica está bem avançada, faltando apenas detalhes e finalizações. Para aí sim passar a colocar novos ônibus e fazer novas rotas! O jogo terá muitas linhas e muitos ônibus no decorrer dos próximos meses, mas antes de começar isso, preciso terminar um conjunto de recursos.

Progresso atual do game (abril de 2017):

https://www.youtube.com/watch?v=th02LENLYOs



Eu já divulguei uma espécie de cronograma aqui, com um pouco do que já foi feito e do que vai ser. Agora, sendo mais direto, vou lisar alguns pontos que serão trabalhados em breve:


  • Melhorias na iluminação leve, ainda não confirmada para celular
  • Paths dos passageiros nos pontos de ônibus (para saírem e andarem um pouco)
  • Melhorias no embarque/desembarque dos passageiros
  • Diálogos básicos dos passageiros (isto vai ser aprimorado com o tempo)
  • Sons dos carros do tráfego (precisa ser algo bem otimizado no Android)
  • Sons extras do ônibus (bateção de lata, suspensão, molas, etc)
  • Mais detalhes no mapa protótipo (detalhes ao longo do corredor)
  • Mais detalhes do sistema de tráfego (luzes dos carros, setas, etc)
  • Chuva não vai ter tão cedo, mas penso em melhorar o clima, sol e sombras
  • Texturas alternativas para o céu, mudando bastante a sensação do jogo


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