Monthly Archives

September 2013

Tools, a developer best friends

By | General, Programming | 8 Comments

Olá galera, eu sou o Perdiga ( ou Vallcrist ( ou Jefferson ) ), o último dos programadores da BitCake a se apresentar por aqui. 🙂 O post de hoje vai falar de uma coisa muito importante pra qualquer equipe de desenvolvimento de jogos ( principalmente para aquelas que usam Unity, como a BitCake ), as ferramentas! O que são ferramentas? Ferramentas são coisas que buscam

Olá galera, eu sou o Perdiga ( ou Vallcrist ( ou Jefferson ) ), o último dos programadores da BitCake a se apresentar por aqui. 🙂 O post de hoje vai falar sobre uma coisa muito importante pra qualquer equipe de desenvolvimento de jogos (principalmente para aquelas que usam Unity, como a BitCake), as tools (Ferramentas em pt-br)!

O que são tools?

Tools são coisas que buscam estender a sua engine ou facilitar o fluxo de trabalho da sua equipe, podem ser divididas em 2 categorias : 3rd Party tools e In-house tools.

In-House Tools

Conforme você e sua equipe desenvolvem o jogo, os programadores muitas vezes irão se deparar com situações do tipo :

  • O sound designer querendo substituir um som no jogo.
  • A artista querendo testar aquela nova partícula hiper irada que acabou de fazer durante o gameplay.
  • O level designer enchendo a paciência porque quer mudar uma rampa de lugar na fase.

Então, como programadores são seres preguiçosos e que ODEIAM coisas repetitivas, nascem as In-House Tools. Nada mais são do que ferramentas que os programadores acabam desenvolvendo pra facilitar o trabalho de outros membros da equipe sem domínio de programação a fazer alterações no jogo, por exemplo :

  • Uma tool que define quais sons tocam quando uma determinada ação no jogo acontece, assim o sound designer pode simplesmente arrastar um som pra essa tool e ele está dentro do jogo.
  • Uma tool que permita que a artista configure quando, onde, e com que parâmetros um efeito de partícula será executado durante o jogo.
  • Uma tool que facilite o fluxo Programa de Modelagem Engine para que o level designer não precise de um programador do lado sempre que quiser alterar o level.

3rd Party tools

Nessa categoria estão as tools que outras pessoas de fora da equipe fizeram e que geralmente servem pra incrementar o poder da sua engine, seja melhorando funcionalidades existentes ou adicionando funcionalidades completamente novas!
Algumas engines possuem repositórios dessas tools, pagas ou gratuitas, facilmente acessíveis, como é o caso da Unity com a Asset Store.
No resto desse post vou dar exemplos de tools que usamos aqui na BitCake para desenvolver o Projeto Tilt, explicando por alto cada uma e mostrando qual o valor que elas agregam a nossa equipe.
Vale lembrar que usamos a Unity, então todas as tools que aparecerem estarão disponíveis para compra na Asset Store

NGUI


Link na Asset Store

Descrição :
Ah… a NGUI. Talvez o melhor investimento que fizemos em tool para o Projeto Tilt, e acho que qualquer um que já tenha tentado fazer uma GUI ( Graphical User Interface ) com a solução nativa da Unity me entende quando digo isso.
A NGUI facilita muito a prototipagem e desenvolvimento de interfaces para o seu jogo e é altamente otimizada para que rode sem problemas de travamento, inclusive em plataformas mobile.
Possui um suporte excelente e muitos exemplos pra explicar o funcionamento da tool.

Quer fazer um botão que ao você clicar nele aumente 10x de tamanho e deslize pra fora da tela? Sem problema.
Quer fazer uma imagem aparecer com fill radial? Sem problema
Quer fazer uma interface com barra de rolagem que funcione parecido com o Iphone? Sem problema

Resumindo, NGUI é facilmente a melhor tool atualmente para desenvolver GUI na Unity, vale facilmente o investimento .

Audio Toolkit


Link na Asset Store

Descrição :
O Audio toolkit é uma ótima ferramenta pra melhorar a qualidade sonora do seu jogo, essa tool possui várias funcionalidades muito legais que adicionam um dinamismo sonoro no seu jogo, principalmente quando sua equipe não tem um sound designer e você se vê obrigado a improvisar com sons grátis achados pela internet afora.
Algumas das features mais legais são :

Definir que um evento de som pode tocar um entre X sons diferentes, pense em uma metralhadora e o quão irritante seria se fosse o MESMO SOM em todos os tiros.
Definir variações aleatórias no pitch e no volume de cada som.
Fade-In e Fade-Out de sons com menos de 2 cliques.

GameAnalytics


Link na Asset Store
Link do site para registro

Descrição :
O GA é uma tool para colher métricas do seu jogo, coisas como DAU (Daily Active Users), MAU (Monthly Active Users), Heatmaps, tempo médio de jogo por jogador… Não vou me aprofundar muito nesse tópico pois provavelmente métricas terão um post só pra elas no futuro. 😉

Melhor coisa do GA :

Photon Networking


Link na Asset Store
Link do site para registro

Descrição :
O Photon é o que usamos para fazer o multiplayer do Tilt, foi uma alternativa melhor e mais simples ao networking padrão da Unity.
Apesar de não possuir uma documentação digna de elogios, é bem simples de se utilizar e, para os preguiçosos, eles oferecem uma opção de servidor cloud pra você nem ter que se preocupar com manutenção de servidores.

Os outros programadores já falaram um pouco sobre o Photon em outros posts ( Aqui, Aqui e Aqui ), então não vou me aprofundar.

E você, caro leitor, quais tools você e sua equipe usam no desenvolvimento dos seus jogos?
Deixe um comentário aqui embaixo nos contando quais são.

Um grande abraço,
Perdiga / Vallcrist / Jefferson
Programmer / Hater @ BitCake Studio

By | Uncategorized | No Comments

“Se é para o bem de todos e a felicidade geral da nação, digam ao povo que o Tilt agora está aberto!” – Dom Pedro I

É isso mesmo galera!

Estamos entrando em uma nova fase de desenvolvimento do Projeto Tilt! A partir de hoje estaremos nos esforçando para atrair mais gente para o jogo, retirando os limites de antes (entrar no grupo para ter acesso) e implementando mais melhorias significativas de interface, gameplay e arte!

Agora quem estiver com vontade de jogar com os amigos não precisa ficar pedindo a ninguém para ser aceito em grupo nenhum, é só mandar o link do jogo e ficar camperando com a Railgun até ele aparecer!

Gostaria de deixar bem claro que ainda consideramos o Tilt em Pré-Alpha, ou seja, ele ainda não tem todas as features principais completas, somente o que consideramos o núcleo do jogo. Ainda temos um longo caminho a percorrer e gostaríamos que todos participassem dessa nossa empreitada, esse é um grande motivo de termos aberto o jogo: precisamos do maior número possível de pessoas para ajudarem a gente a testar e a nos falar o que estão achando da experiência de jogar Tilt! CHAME TODOS OS SEUS AMIGOS!

Então se você tiver algo a dizer sobre o jogo, CONTE-NOS TUDO!

Nosso grupo de testers do Facebook continuará funcionando como canal de Feedback da galera, e caso vocês tenham algo a nos dizer (sobre o jogo! sobre o jogo!), deixe um comentário no nosso grupo. Vocês podem acessá-lo pela URL: http://www.projecttilt.com/bitcakestudio/testers/

É isso aí meu povo!

Em breve teremos mais posts sobre o desenvolvimento do Tilt e o que estava rolando aqui no estúdio por baixo dos panos!

Bom Teste e não se esqueça de CHAMAR SEUS AMIGOS!

 

Abraço,

Equipe da BitCake!

 

PS: PORQUE VOCÊ AINDA TÁ LENDO ISSO AQUI?

By | Uncategorized | 3 Comments

Olá internet! Aqui quem fala é seu programador favorito da BitCake (ok.. forcei a barra não é? D:) novamente! Enfim, estou aqui para concluir o já postado: Networking Code: Runas, Buzios, e Tarot (Parte 1). Aproveito para agradecer a vocês que têm lido todas as nossas postagens e, ainda por cima, comentado em alguma delas! Bom, onde paramos… alguns detalhes ainda ficaram por ser explicados desde o último post.

Primeiramente, vamos rever nossa fórmula de “prediction”:

float dt = Time.timeStamp - photonMessageInfo.timestamp;
Vector3 posNova = pos + vel * dt;

Existe uma melhora muito interessante que podemos fazer nessa formula. Lembram-se do ping? Aquele atraso entre o envio e recebimento da mensagem? Então! Por que não levar em conta esse tempo na equação? Afinal, a mensagem nos trás informações sobre um player há um ping no PASSADO. :O Logo, o nosso “dt” seria mais algo do tipo:

float dt = Time.timeStamp - ( photonMessageInfo.timestamp + meuPing );

Meu ping pode ser calculado (novamente, aproximado 😉 ) com o Photon através da função: “PhotonNetwork.GetPing()”

Mas atenção! “GetPing()” do Photon retorna um número inteiro que representa o ping em milisegundos. Entretanto, nossas contas são feitas em segundos. Logo, é necessário multiplicar o valor por 0.001f; Assim, podemos obter o próprio ping com:

float meuPing = PhotonNetwork.GetPing() * 0.001f;

Ótimo! Agora nosso “prediction” ficará bem mais preciso e suave! uhul!

(Retirado de http://3dgep.com/?p=4609)

Mas repararam? Nosso código apenas lida com situações onde estamos num tempo à frente do player que mandou a mensagem. Isto é: o que aconteceria caso “Time.timeStamp” fosse menor que “( photonMessageInfo.timestamp + meuPing )”? Então! O que significa um “dt” negativo? Isso mesmo. Que a mensagem veio de um player que está em um tempo mais à frente que o nosso, do futuro!

There’s the catch!

Nesse caso, estaríamos NÃO tentando prever a posição do player no FUTURO, mas no PASSADO!

Ok, mas qual o problema? Bom, não problema, mas sim uma forma de melhorar os casos quando isso ocorre. Como, você diz? Acontece que se o player a ser sincronizado está no futuro, então ele já passou pelo “time stamp” quando nos encontramos atualmente. Dessa forma, regularmente (a cada frame, por exemplo), podemos salvar o estado desse player num buffer para que quando for o momento de sincronizar a posição do outro player, iremos acessar as posições nesse buffer.

O Buffer consiste de uma lista de estados. Enquanto que um estado consiste de uma estrutura que contém uma posição (Vector3), uma velocidade (Vector3) e um “time stamp” (float). Sempre mantemos essa lista ordenada por “time stamp” para que possamos buscar facilmente o estado desejado. Essa busca refere-se a achar o estado com o maior “time stamp” que seja menor que o “time stamp” atual do player local. Uma vez com esse estado em mãos, pegamos o estado seguinte (com o “time stamp” justamente maior).

Agora sim! Sabendo esses dois estados, poderemos INTERPOLAR entre eles (isto é, tirar uma média ponderada) para descobrir enfim a posição do player remoto. Isso será mais preciso do que apenas aplicar nossa antiga fórmula já que não estaremos prevendo um valor no futuro mas sim usando uma espécie de “histórico” por onde o jogador remoto passou.

Para fazer a média (interpolação) usaremos como peso a diferença entre o “time stamp” atual e o do primeiro estado. Isto é:

Estado primeiro = EncontraPrimeiroEstado(buffer);
Estado segundo = EncontraSegundoEstado(buffer);

float deltaTime = segundo.timestamp – primeiro.timestamp;
// Ainda levamos o ping em consideração para melhorar o resultado!
float peso = (Time.timeStamp – meuPing) / deltaTime;

Vector3 novaPos = Vector3.Lerp(primeiro.position, segundo.position, peso);
// Podemos fazer o mesmo com a velocidade para que leve em consideração
// a velocidade que o player tinha naquele “time stamp”
Vector3 novaVel = Vector3.Lerp(primeiro.velocity, segundo.velocity, peso);

É isso ae! Espero que isso melhore o netcode de vocês! ;D Vale ressaltar que agora vocês terão de fazer algum tipo de “if” para checar se estão no primeiro caso (player a ser sincronizado está no passado) ou no segundo (ele está no futuro) e então aplicar as respectivas técnicas. 😀

Agora é a vez de vocês testarem tudo isso em casa e depois comentarem por aqui se conseguiram fazer tudo funcionar com sucesso! Não se assustem, façam com calma cada pedaço do código. Pois ao final, serão compensados com um networking de qualidade. 😉 Claro, sempre há maneiras de melhorar, e conforme nós formos melhorando o nosso código iremos postar novidades!

Para verificar tudo isso implementado em um jogo, não esqueça de conferir as atualizações de Tilt. Os Srs. leitores podem se tornar Closed Testers se inscrevendo no grupo de Facebook: bitcakestudio.com/testers/. Depois de se inscreverem no grupo (é insta-accept!), poderão jogar direto no Facebook através do link: bitcakestudio.com/tilt/.

Keep calm and happy testing!