Scripts, dicas e tutoriais de Unity 3D e programação de jogos

Publicarei aqui vários códigos e dicas que desenvolvi para uso no meu projeto de game de simulação de ônibus. Programar uma cidade é algo bem complexo, envolve várias etapas… Espero que algumas dicas sejam úteis! Embora eu não possa compartilhar tudo, vou compartilhar o máximo de códigos e técnicas que puder.

Como fazer cenas grandes na Unity

Já tentou fazer uma cena gigante na Unity, com um cenário amplo, cheio de ruas e objetos? Não dá, né? Tudo fica pesado, tanto no editor como no game… O jeito é dividir a cena em segmentos e desativá-los no editor, ativando somente quando o jogador chegar perto. Fiz um script bem simples mas poderoso para isso. Ele permite criar cenas bem grandes, maiores do que as cenas padrões que o editor suportaria caso nada estivesse desativado.
Detalhei o processo em dois vídeos: um teórico e outro prático. Acesse aqui:

Vídeo 1 – Teoria e conceitos
Vídeo 2 – Prática e script

Download do script: http://pastebin.com/rUn7vDJE
Para aprender a utilizá-lo, é imprescindível que você assista ao segundo vídeo!

Se você tiver uma dica melhor de como implementar este recurso, comente nesta página, por favor :D Caso edite o script, seria legal compartilhar conosco de volta, ajudando a toda a comunidade também! Se puder, poste no Pastebin marcando a sintaxe em C# e compartilhe nos comentários :D

Mapa grande, câmera tremendo, sombras e luzes fora de sincronia? Você precisa do floating origin!

Se você já percebeu perda de precisão nos cálculos, tremedeira na câmera e outras coisas bizarras nas luzes e sombras do jogo ao se afastar muito da origem da cena durante o gameplay, saiba que não está sozinho! Provavelmente isso se deu pela perda da precisão dos números float, que armazenam apenas até 7 dígitos, com flutuação da posição da casa decimal. Quanto mais longe do 0,0,0, menos precisos os cálculos ficam, pois mais números são usados para os inteiros (antes do ponto/vírgula) e menos para os decimais.

Há um script para “corrigir” isso, que move todos os objetos da cena para a origem considerando a posição da câmera ou do player. Ao passar de um certo valor, tudo é movido, impedindo que a precisão das casas decimais seja perdida.

Entenda o que acontece na prática, e como resolver, ativando o script:

Tutorial sobre o floating origin na Unity

Download do script: http://wiki.unity3d.com/index.php?title=Floating_Origin

Não se esqueça de desmarcar “Static” em tudo! Caso contrário os objetos não serão movidos. Isso impede o uso de recursos como Occlusion Culling, Lightmaps nos objetos estáticos e Navmesh Agent. Você terá que programar algo do zero ou usar outros sistemas/assets/scripts para tais funcionalidades. Vai depender do seu projeto, o que é mais importante? No meu caso, com game de cidade ampla e direção, a correção dos números float falou mais alto.

Para saber mais sobre floating point, recomendo ver:
https://en.wikipedia.org/wiki/Floating_point


Em breve:

  • Como ativar/desativar todas as luzes de uma vez (por ex: luzes dos postes numa cidade)
  • Script para trocar as texturas de um material (ex: letreiro de ônibus digital, anúncios aleatórios em pontos de ônibus e painéis, etc)
  • Sistema de tráfego de carros e pedestres na Unity, algo bem complexo (postei um vídeo demonstrando como funciona, mas ainda falta muito para liberar o código)

Os códigos e dicas aqui te ajudaram? Me ajude aí também! ;)

Desenvolver um game com cidade, carros e pedestres é algo bem complexo! Exige muito tempo, estudo e dedicação. Estou fazendo o possível para passar por cima das limitações e ter meu projeto de jogo concluído um dia, o BRT Simulator, que abrirá as portas para outros games.

Muita coisa que estou produzindo pretendo liberar na forma de dicas/scripts, que serão úteis para outros jogos! Se você desenvolve games e curtir a ideia aproveitando algum código meu, poderia colaborar de volta com alguma quantia financeira? Assim você me ajuda e incentiva a publicação de mais códigos :D

Se puder, faça uma contribuição de qualquer valor na campanha do meu jogo:
http://blog.brtsimulator.com/

Bitcoin:
1Cgoevrja4ZhCy3rtsnR55LPGP6DKb9J2E

Ou via Paypal ou PagSeguro:




O valor fica por sua conta, pode ser R$ 30, R$ 100, etc. Quanto você achar que o meu trabalho vale. Use os botões do PagSeguro ou Paypal, onde dá para de várias formas, incluindo cartão e boleto.

É algo opcional, não estou cobrando pelos códigos! Mas se você puder retribuir, o dinheiro será muito bem utilizado na compra de objetos de cenários e eventualmente melhorias de hardware. Assim meu game anda mais rápido! Consigo me dedicar por mais tempo aos códigos, e me animo a postar mais códigos que estou produzindo para download livre! Apesar do meu jogo não ser open source, quero compartilhar muitas coisas com outros projetos.

Inclusive modelos 3D, como estes:

Objetos 3D by MEP livres para uso em jogos

Com mais recursos provenientes destas campanhas de arrecadação voluntária, uma espécie de financiamento coletivo… Eu consigo separar mais tempo para continuar produzindo este tipo de conteúdo livre, que ajuda diversas outras pessoas que estão fazendo games indie também.

Caso queria fazer alguma contribuição diferenciada, entre em contato!

comments powered by Disqus