segunda-feira, 30 de agosto de 2010

026 - Mutirão indigente: resultados

Sábado (28/ago) teve um mutirão para os calouros do último processo seletivo - entenda como Eu, Kleber, Anderson, Luíza...

Estavam lá eu, Kleber e os veteranos Paulo e Jandson. Victor também apareceu por lá.

Ficamos tentando fazer um jogo em flash. Seguimos um tutorial que achamos na internet. O tutorial ensinava a fazer o jogo em AS2. Fica o desafio de fazer o mesmo jogo em AS3.

Se eu, é claro, conseguir entender isso. :(

quinta-feira, 26 de agosto de 2010

025 - Joguinhos insanos do mês

Já que estamos falando de flash, não dá para não deixar de comentar sobre estes jogos que bombam na web. Diversos sites como newgrounds, kongregate e miniclip sempre lançam alguma coisa que vicia. Pode ser ridículo, mas sempre vicia.

Ontem mesmo achei um jogo insano que mobilizou boa parte dos membros do Indigente presentes na reunião daquele dia antes da mesma começar. Chama - se MORPLEE. O objetivo do jogo é destruir aliens antes que eles destruam você, vencer 25 minigames e, ao final, vencer a nave mãe. Tudo isso em 60 segundos. É um jogo de clicar, assim como ONE BUTTON BOB, outro jogo insano também.



Jogue também e entenda a pressão.
http://www.newgrounds.com/portal/view/546073

segunda-feira, 23 de agosto de 2010

024 - Miúda e o Guarda-Chuva: Memorize isso

Vou dar uma pausa no tutorial para "tentar" dar segmento ao pacote de jogos miúdos. Como calouros, temos a fácil tarefa de produzir um jogo da memória em Flash para esse pacote.

Minha grande dificuldade é traduzir a ideia de como será o código para o ActionScript 3.0. Confesso que não peguei o jeito da linguagem e preciso, urgente, de algumas aulas sobre isso. O máximo que consegui até o momento é pedir para que o programa diga qual o botão eu apertei.

Agora, o que fazer depois disso?

Eu amanhã, hei de encontrar uma resposta.

sexta-feira, 13 de agosto de 2010

023 - Space invaders (8) - Tags: a identidade no jogo

No últimos posts, desenvolvemos a IA dos aliens: sua movimentação pela zona de jogo e os momentos nos quais os aliens atirariam.

Só que não adianta nada ter uma nave que se move para os lados, aliens querendo te destruir e vários tiros se quando você mata o alien, você não ganha ponto. Ou quando você é morto, não aparece a tela de Game Over.

Vamos pensar da seguinte forma: todo game possui um "juiz" que valida as ações executadas no jogo. Tomemos como exemplo Mario. Esse "juiz" verifica quantas moedas o nosso encanador de boné vermelho pegou ao longo da fase, quantos bichinhos ele matou, quanto vale cada bichinho morto, os combos, o equipamento que ele está usando [cogumelo, fireflower, a capa que voa, invencibilidade...], etc.

Agora nós vamos dar vida a esse "juiz", que irá dizer o que acontece se, por exemplo, você atira e destroi o alien [já criamos o poder destrutivo do tiro. Mas quantos pontos você ganha por ter feito isso?].

Isso será feito com a ajuda das TAGS. São termos gerais que identificam grupos de GameObjects no Unity. Isso será uma referência para os nossos scripts que terão execuções especiais se um objeto com determinada tag estiver envolvido na ação.

As tags podem ser editadas no menu Edit >> Project Settings >> Tags
As informações aparecem na guia Inspector



Criaremos, a princípio, 4 tags para identificar os elementos principais do jogo:

  • Nave: identificará a nave do protagonista
  • Alien: identificará os aliens em jogo
  • TiroNave: identificará o tiro da nave do protagonista
  • TiroAlien: identificará o tiro da nave alien.
Para criar uma nova tag, na guia inspector, na parte de tags, clique no espaço vazio ao lado de Element 0 e coloque o nome da tag desejada [conforme mostrado acima].




Nos scripts, usaremos as tags entre aspas duplas dessa forma: "Nave", "Alien", "TiroNave", "TiroAlien"


A seguir quero compartilhar com vocês a minha recente descoberta e que será bem útil em nosso jogo: o sistema de pontuação. É aqui que começaremos a usar as nossas tags.

quinta-feira, 12 de agosto de 2010

022 - Space invaders (7) - Artilharia pesada

Na última postagem, vimos como aplicar os scripts de movimentação dos aliens nos modelos. Vimos também a necessidade de dois componentes que permitam a interação do alien com o ambiente: rigidbody e box collider. Estes dois componentes serão bastante úteis quando analizarmos colisões entre tiro e GameObject.

Anteriormente vimos como fazer a nave do protagonista atirar. Agora faremos os aliens atirarem.

1) A primeira coisa que precisamos é de um canhão para a nave. A construção de um canhão já foi explicada no post 008
Dê o nome deste canhão de "Canhao_alien".

2) Uma vez criado o canhão, é necessário um script que permita a sua ativação de forma automática, ou seja, quando o alien irá atirar, a frequência do tiro e a velocidade.
Crie um novo script. Dê o nome de "Atirar_alien". Copie o texto abaixo:

var newObject : Transform;
var tstart = 0.0;
var freq = 0.0;
InvokeRepeating ("LaunchProjectile", tstart, freq);

function LaunchProjectile () {
    Instantiate (newObject, transform.position + Vector3.forward * -55, transform.rotation);
}

3) Aplique este script à "Canhao_alien"

4) Jogue o "Canhao_alien" dentro do prefab do alien. Procure posiciona - lo no lugar mais conveniente conforme o seu modelo de alien.
Lembre - se: qualquer alteração no prefab fará com que você o perca, isto é, tire do objeto o rótulo de prefab. Depois de colocar o canhão, clique em Apply para salvar as alterações nele.

5) No nosso script "Atirar_alien" existem 3 valores que precisam ser determinados:
  • New Object: determina o objeto que será instanciado [no nosso caso, a prefab "Tiro"]
  • Tstart: determina quando o alien começará a atirar
  • Tfreq: determina a frequência de tiro. Quanto menor esse valor, mais tiros por frame serão gerados


Assim como os scripts para mover o alien, também é preciso determinar valores diferentes para cada canhão de cada alien. A frequência de tiro pode ser a mesma, ou pode ser variável para dar a noção de incerteza de quando será o próximo ataque.

6) O tiro que sairá do canhão alien deve ser diferente daquele que sai do canhão da nave do protagonista. Isso porque este último possui trajetória voltado para o norte [para a parte alta da tela]. Se esse tiro for colocado como objeto a ser instanciado pelo canhão alien, o que vai ocorrer? Ao invés de o tiro ir para baixo [na direção da linha de movimentação da nave do protagonista], ele vai para cima e não atingirá ninguem, ou seja, o tiro literalmente vai sair pela culatra. :p
Para isso, teremos de criar outro prefab que irá representar o tiro do alienígena. Usa - se então o mesmo processo descrito no post 008.
Esse tiro deverá ter os mesmos scripts do tiro do protagonista: "Atirar - mover tiro" e "ColisaoTrigger".

A seguir, teremos o sistema de tags. Um sistema bastante útil para, por exemplo, fazer o score de jogo ou determinar o seu fim.

terça-feira, 10 de agosto de 2010

021 - Space invaders (6): Hora de adestrar aliens parte 2

Certo, galera. Temos enfim os scripts que farão os aliens se moverem. Agora precisamos posiciona - los no cenário de forma a determinar as suas trajetórias e ações. Faremos um passo a passo disso.

Até este ponto usamos as formas que o próprio Unity nos oferecia, ou seja, cubos. Para criar os modelos que realmente serão usados no jogo, precisaremos de ferramentas de modelagem adicionais, afinal o Unity não é uma boa pedida para modelagem. Nesse caso, sugiro para vocês o SketchUp. Maiores informações sobre ela podem ser encontradas no blog de Anderson Sampaio.

Existem outras ferramentas além dessa. Tô sugerindo essa pois boa parte da modelagem foi feita nela.

Vamos começar a treinar os aliens para não fazerem feio na hora do jogo.

1) Se lembra do terreno que pedi no inicio do tutorial? Será nele que colocaremos os aliens da espera, ou seja, aqueles que você não vê enquanto joga.



2) Vamos criar a área onde todo o jogo se desenvolverá - onde a nave do protagonista vai ficar e por onde os aliens irão passar.
GameObject >> Create Other >> Plane



3) Ajuste as dimensões do plano (Inspector >> Transform >> Scale)
X = 200
Y = 100
Z = 150
O Eixo y não influencia muito no plano.



4) Agora é hora de acionar o SketchUp. Aqui nós vamos usar o formato .FBX. Vá no menu Assets >> Import New Asset.



5) Selecione o .fbx do seu modelo de alien e clique em Import.



6) O arquivo importado aparecerá como novo objeto na guia Project.



7) Jogue esse novo objeto no cenário e edite as suas dimensões.
X = 400
Y = 400
Z = 400



8) Se você criar um modelo monocromático, como esse do primeiro alien, você pode alterar a textura do modelo pelo próprio Unity. Crie um novo material (Assets >> Create >> Material)



9) Nomeie "Cor Alien 1"

10) Clique no modelo do alien que está no cenário.

11) Na guia Hierarchy, perceba que esse modelo está dividido em partes. Vamos editar cada parte com o nome "Mesh"



12) Clique em um dos "Mesh" de seu alien.

13) Vá em Inspector >> Mesh Renderer >> Element

14) Mude para "Cor Alien 1"





15) Faça isso para todas as Mesh que tiver no alien.



16) Converta esse alien em um prefab. Só relembrando como se converte algo em prefab:
Assets >> Create >> Prefab
Nesse momento o ícone do prefab está cinza
Nomeie o prefab com F2
Arraste o objeto da guia Hierarchy para dentro do icone do prefab criado
Agora temos o ícone azul.

Nesse caso, nomeie - o de "Alien_Direita"

17) Delete o alien atual (que está na guia Hierarchy) e substitua - o pelo prefab.

18) Aplique nele o script "Move_alien_direita" que criamos no post anterior. Cuidado para não aplicar em alguma parte do prefab. O script deve ser aplicado em "Alien_direita".
Isso fará com que você perca o prefab temporariamente.



19) Clique em Apply



20) Copie e cole mais 4 desses aliens, posicionando - os em diagonal. Procure usar as setas para posiciona - los no mesmo plano. (As coloridas que aparecem na tela, não as do teclado!!!)



21) Edite cada alien separadamente conforme a figura abaixo:



22) Salve e teste. Ctrl+S e Ctrl+P
Perceba que os aliens se movem para a direita, mas não caem. Eles flutuam no ar.

Isso acontece porque eles não são corpos rígidos - corpos com massa - e acabam não sofrendo influência da gravidade local e de outras forças externas.

23) Selecione um dos aliens.
Component >> Physics >> Rigidbody
De novo perderemos o prefab tempoariamente. Novamente, Apply
Isso aplicará "Rigidbody" aos 4 aliens restantes.



24) Salve e teste.
Agora os aliens sofrem ação da gravidade, mas acabam atravessando o plano.

Isso ocorre porque eles não possuem superficie de contato. São "fantasmas" na verdade.

25) Selecione um dos aliens
Component >> Physics >> Box Collider



26) Ajuste a posição e as dimensões do Box Collider
Sugiro como na figura abaixo



27) Apply!

28) Salve e teste.
Agora os aliens deslizam pelo plano e caem logo em seguida.
Se estiverem muito próximos, poderão até bater uns nos outros, desviando a sua trajetória. Procure posiciona - los de forma que isso não aconteça.

Siga esses mesmos passos para criar outros aliens, para que você possa aplicar os outros 5 scripts restantes.

Dicas:

  1. Nomeie cada alien dessa forma: "Alien_[nome do script]"
  2. Dê para cada alien uma cor diferente (caso ele seja monocromático, ou seja, as cores de cada parte não tenham sido editadas préviamente no SketchUp)
  3. Na hora de ajustar os Tstart dos novos aliens, procure colocar o mesmo intervalo entre eles (1 >> 1,5 >> 2 >> 2,5 >> 3 >> 3,5)
  4. Se houver um alien com outro script de movimento, coloque um intervalo maior entre os Tstart. (EX.: Entre o último "Alien_direita" e o primeiro "Alien_esquerda". Coloque Tstart = 3 para "Alien_direita" e Tstart = 4 para "Alien_esquerda").
A seguir, vamos aprender a fazer os aliens atirarem.

sexta-feira, 6 de agosto de 2010

020 - Space invaders (5): Hora de adestrar aliens

Desculpem a demora em postar aqui. Tive vários problemas com minha internet e ainda o jogo de Miúda. Hora de voltarmos ao nosso tutorial Space Invaders depois de mais de 2 meses parado.

O que faremos agora será mover os aliens. A princípio faremos vários scripts que farão eles se moverem de diferentes formas. Esses scripts terão alguns elementos em comum, como início do movimento, velocidade e autodestruição do alien (não é bom ele ficar muito tempo no cenário, mesmo que fora do alcance da câmera. Isso pesa muito a memória).

1) Vamos primeiro tentar fazer os aliens descerem contra a sua nave, partindo da direita para a esquerda.
Crie um novo script e nomeie "Move_alien_esquerda". Escreva o script abaixo


var x = 1.0;
var y = 25.0;
var velocidade = -5.0;
var tstart = 0.0;
var tfreq = 0.0;
InvokeRepeating ("MoveAlien", tstart, tfreq);

function MoveAlien () {
transform.Translate(x-(y*0.0125), 0, velocidade);
y++;
Destroy(gameObject, 10+tstart);
}


Nesse script, assim como em outros que virão a seguir, teremos as seguintes variáveis comuns:

  • velocidade: determina a velocidade com o qual o alien se projetará na direção do eixo Z (ou seja, de cima para baixo)
  • tstart: determina quando o alien começará a se mover
  • tfreq: determina a velocidade com o qual o alien se moverá no todo.
A nossa base para os outros scripts será a função MoveAlien. Só mudaremos algumas coisinhas nesse script de forma a gerar os outros efeitos.

2) Vamos mover os aliens da esquerda para a direita da mesma forma que o script 1. Crie outro script e nomeie "Move_alien_direita". Escreva o mesmo script acima.

Na linha 10, onde tem - se
y++;
Troque por
y--;

3) Vamos mover os aliens apenas no eixo horizontal, sem eles descerem contra a sua nave. Partindo da direita para a esquerda.
"Move_alien_esquerda_semdescer"

Aqui, o valor da variavel velocidade sempre será nulo.
Na linha 9, onde tem - se
transform.Translate(x-(y*0.0125), 0, velocidade);
Troque por
transform.Translate(x-(y*0.0125), 0, 0);


4) Agora mover os aliens da mesma forma que em 3, partindo da esquerda para a direita.
"Move_alien_direita_semdescer"




Na linha 9, onde tem - se
y++;
Troque por

y--;

5) Agora, vamos mover os aliens em linha reta, apenas descendo. Sem se mover para a esquerda ou direita.
"
Move_alien_desceReto"

var tstart = 0.0;
var tfreq = 0.0;
var velocidade = -5.0;
InvokeRepeating ("MoveAlien", tstart, tfreq);

function MoveAlien () {
transform.Translate(0, 0, velocidade);
Destroy(gameObject, 10+tstart);
}


6) E por fim, faremos os aliens descerem e pararem depois de um certo tempo.
"Move_alien_parar"

var x = 1.0;
var y = 0.0;
var parar = 100;
var tstart = 0.0;
var tfreq = 0.0;
InvokeRepeating ("MoveAlien", tstart, tfreq);

function MoveAlien () {
if (y < parar) {
transform.Translate(0, 0, 5);
y++;
}
else {
y += 0.1;
}
Destroy(gameObject, 30);
}

Com isso temos 6 scripts diferentes para mover os aliens de 6 diferentes formas:
  1. Move_alien_esquerda
  2. Move_alien_direita
  3. Move_alien_esquerda_semDescer
  4. Move_alien_direita_semDescer
  5. Move_alien_desceReto
  6. Move_alien_parar
Basta aplicar cada script aos modelos dos aliens que você desejar.
No cenário, clique no modelo do alien de sua preferência. Depois vá em "Component >> Scripts".

Escolha um dentre os 6 scripts que estão listados acima.
Você pode editar os valores das variáveis na própria tela do Unity, sem ter de alterar o script diretamente. Dessa forma, você pode setar valores individuais para cada alien.














Principalmente quanto a Tstart. É importante haver valores diferentes para essa variável. Na próxima, veremos como ajustar os valores dessa variável para diversos aliens no cenário.