terça-feira, 14 de dezembro de 2010

038 - Joguinhos insanos Novembro/2010: Doodle God & Doodle Devil

Voltei com os joguinhos insanos do mês. Este mês temos dois quebra - cabeças com um enredo interessante: a criação do mundo sob o ponto de vista de Deus e do Diabo.

Em Doodle God (eu disse Doodle, não Google), cabe a você recriar os elementos a partir dos quatros primários: fogo, terra, ar e água. Por exemplo: fogo+terra=lava.

Já em Doodle Devil, alem de recriar os elementos que Deus já havia criado no anterior, cabe a você recriar as maldades do mundo. Por exemplo: morte+fogo=inferno.






Recriar o mundo, alem de ser um ótimo exercício para a mente, também é um bom passatempo.

Doodle God: http://www.newgrounds.com/portal/view/540083
Doodle Devil: http://www.newgrounds.com/portal/view/554152

quinta-feira, 2 de dezembro de 2010

037 - Professor português no Indigente

Hoje [01/dez] recebemos a visita do professor Samuel Almeida da Universidade de Aviero / Portugal. Mostramos todos os jogos desenvolvidos pelo grupo e a história de cada um, desde Airrox até Kirimurê, passando pelo Space Invaders.

Em troca, Samuel nos mostrou o seu projeto de mestrado: uso de eye tracker em jogos.

Para quem não sabe, o eye tracker (ou trajeto do olho) é um software que mostra o trajeto que nossos olhos fazem durante um jogo ou quando observamos algum cartaz.

Samuel nos mostrou os resultados de suas pesquisas a partir do jogo "Call of Duty", com um grupo de jogadores usando o sistema de eye tracker. Segundo o professor, constatou - se que algumas áreas do mapa de jogo não eram muito visualizadas pelos jogadores. Tambem procurou verificar as zonas na tela mais focadas pelos jogadores, o foco dos jogadores nas regiões periféricas da tela, questão de foco nas informações exibidas durante o jogo.

No desenvolvimento de um jogo, isso poderia ser útil para valorizar regiões do cenário não valorizadas, como no caso de "Call of Duty". Experiências com interface: nos FPS (tiro em primeira pessoa), costuma - se colocar as informações de jogo em posição específica: life, munição e inventário geralmente no canto inferior da tela. Mapas e tempo de jogo no canto superior da tela. Como exemplo cito cinco jogos: os clássicos Hexen (Nintendo 64 e Sega Saturn) e Quake 2 (para N64 e PC), e os mais recentes Call of Duty 2, Unreal Tournament e Half Life. É fácil observar isso.














































Ainda segundo Samuel, existem softwares livres sobre eye tracker. Quem sabe possamos implementar isso aqui no Indigente para melhorar os jogos atuais e os futuros. Kirimurê, por exemplo.

quarta-feira, 1 de dezembro de 2010

036 - Os resultados do processo seletivo indigente 2010.2

Um mês de processo seletivo se passou. Vamos aos resultados.

A missão dos calouros (que eu não contei nos posts anteriores) foi fazer um tower defense em flash. Como inspiração o antigo projeto do Indigente "Miúda e o guarda-chuva".

Das 3 equipes formadas, apenas duas apresentaram seus projetos. Pelo menos a taxa de evasão foi, digamos, menor que a do processo seletivo anterior.

Os jogos ficaram legais. Acho que os "aspirantes" conseguiram mostrar aquilo que aprenderam no uso do flash e do actionscript 3.0. Já seria até possível eles ensinarem a outros membros do Indigente aquilo que não sabemos sobre AS3.

Uma coisa bastante interessante nos projetos é que eles são complementares: o que um tem, o outro não tem e vice - versa. Um tem uma boa parte gráfica mas tem pouca programação. O outro tem boa programação mas tem pouca parte gráfica. Isso leva a esses grupos juntarem os projetos e transformarem os seus TDs em algo mais forte e significativo aqui no grupo.

Muita coisa nova há de chegar aqui.

sábado, 13 de novembro de 2010

035 - Do Unity ao UDK

Comecei a estudar uma nova ferramenta: Unreal Development Kit (ou simplesmente, UDK). Ele possui uma interface parecida com a do Unity, mas os recursos gráficos são mais poderosos que os da ferramenta anterior.

Já vi um desses jogos rodando com gráfico no máximo no IPhone. O domínio desta ferramenta permitirá ao grupo desenvolver jogos bem legais.

O próprio UDK disponibiliza exemplos prontos para serem usados nos jogos: exemplos de objetos de cenário, sistemas de partículas, etc.

Só tenho dificuldade em construir cenários. Você não "desenha" um cubo ou um cone, e sim manipula um gerador dessas formas. Depois de dar formas ao objeto, basta adicionar uma mesh no mesmo.

Ainda falta ver a parte de programação. Qual a linguagem utilizada pela engine.

Ainda falta ver muitas outras coisas. Preciso de um tutorial. :p

quarta-feira, 3 de novembro de 2010

034 - Longa pausa, retorno breve

Saudades?

Muito tempo sem postar?

Alguém aí acha q esqueci da existência deste blog?

Verdade. Muitas coisas aconteceram tanto pessoal como no Indigente no transcorrer do mês de outubro. O grupo vem de um longo processo de reestruturação após a finalização (aparente) de Kirimure, principal projeto do grupo. O foco no projeto era tanto que não havia nem tempo para cuidar da nossa sala. Reservamos um dia só para limpar a sala. Muitas reliquias do grupo foram encontradas. Relíquias que nem os próprios membros sabiam da existência. Trabalho duro, resultado maneiro.

Em reunião, já estava decidido que cada membro do Indigente e os calouros do processo seletivo teriam logins individuais nos computadores da sala 136 (usuário prórpio, senha própria). Bem isso já foi feito. Falta agora a criação de um servidor para cada usuario poder acessar seus arquivos de qualquer computador, similar ao sistema usado nos laboratórios do Instituto de Matemática.

Hoje cada usuário só pode guardar seus arquivos na máquina que usar.

Pretendo agora reiniciar Space Invaders, de novo :( Nas postagens anteriores já havia falado que tentaria implementar o boss do jogo. Porém o jogo estava com um grande problema: não conseguia de forma alguma controlar a velocidade dos aliens. Muitos que leram os tutoriais podem não ter percebidos mas as dimensões usadas nos modelos do jogo são grandes demais. Acho que isso pode estar pesando o jogo e dificultando o controle de velocidade do jogo. Vou refazer o jogo do zero usando o tamanho original dos modelos.

Começarei isso em breve. Só to esperando este processo de reestruturação se concretizar. Ainda tem mais: com a reforma do Instituto de Matemática com certeza a sala 136 será interditada. Quando este dia chegar, devo estar preparado.

Não tenho certeza, mas vou ficar devendo o joguinho insano do mês de outubro. Quem tiver sugestões, comenta aí!

Até a próxima :p

sábado, 2 de outubro de 2010

033 - Joguinhos insanos do mês de Setembro

Nesse mês de setembro não houve jogo mais falado no Indigente do que este.

Trata - se de Minecraft.

Ainda em versão alpha, Minecraft transforma você em um minerador que sai em busca de material para criar diversos objetos e armas para matar monstros que você encontra por ai. Os materiais tambem podem ser usados para construção de obstaculos como muros ou até escadas.

Aparentemente o jogo é so isso: fazer uma casinha, minerar, fazer o seu próprio mundo, fazer o que você quiser. Afinal de contas, nem objetivo definido o jogo tem.

O design do jogo é simples e bastante retro. Mais precisamente, cúbico. As galinhas são feitas de cubos, porquinhos, vaquinhas, ovelhas, você... tudo é feito a base de cubos.

E acima de tudo, é viciante.



www.minecraft.net

sábado, 25 de setembro de 2010

032 - Space invaders vai voltar (4): esse boss não é imortal

Por fim, depois de desenvolver a movimentação do boss, já temos o método de controle do boss. Afinal de contas, com um tiro só você não mata o boss (a menos que você seja muito, mas muito forte).

Acho que posso impletentar esse metodo para desenvolver o life da nave e dos aliens.

sexta-feira, 24 de setembro de 2010

031 - Indigente 2010: Vai começar mais uma seleção

Dia 25 de setembro - neste sábado - as 9 da manhã, começará mais um processo seletivo para o Indigente. Eu e muitos dos "calouros indigentezinhos" estarão prestigiando o inicio dessa jornada para os calouros de 2010.2

Eu, particularmente, espero que haja mais dedicação daqueles que querem seguir a carreira de desenvolvimento de jogos e que pretendem ingressar no grupo. Indigente não é brincadeira. Já estive na pele de calouro no semestre passado e agora, vou estar na pele daqueles que dizem quem fica e quem sai.

E o que vai rolar? O que os calouros terão de fazer? Qual será a prova de fogo deles?

Bem...

Vocês realmente acham que eu vou abrir o bico e revelar tudo!?

quinta-feira, 23 de setembro de 2010

030 - Space Invaders vai voltar (3) - criando um boss e aprimorando o jogo

Comecei hoje a elaborar o boss. Anderson vai me ajudar na modelagem do mesmo. Minha preocupação inicial é faze - lo se mover de forma a mante - lo na tela e não deixa - lo parado.

Ora, não entendo porque mas se um alien fica parado e leva chumbo ele não morre! :(

O script de mover o boss já está pronto. O próximo passo é fazer com que ele só seja destruido com determinado numero de disparos que receber, ao contrário dos outros aliens que se destroem com uma única porrada.

Anderson também me deu algumas ideias de o que completar no jogo: visão isométrica, efeito de propulsor, efeito de explosão, a parte gráfica do HUD...

quarta-feira, 15 de setembro de 2010

029 - Space Invaders vai voltar (2): Nova disposição dos aliens. Falta boss

Essa semana recriei o script de mover aliens e a disposição dos mesmos no cenário. Na versão antiga 90% dos aliens eram do modelo 1 enquanto os outros 10% eram do modelo 2. Agora tentei colocar meio - a - meio.

Não consegui desfazer o bug dos aliens metralhadores - aqueles que você tem que matar antes que eles parem senão eles não morrem - mas consegui desenvolver uma maneira de eliminar os aliens que o jogador não consegue matar. Esses aliens permaneciam no espaço de jogo por longo tempo atirando continuamente, consumindo memória e deixando o jogo pesado, comprometendo a sua jogabilidade em alguns momentos. Agora que esses aliens são removidos quase que imediatamente, o jogo fica mais leve.

Em breve colocarei dois videos do Space Invaders: o gameplay e os erros de programação. Os dois ficaram bem legais e o video do gameplay será usado para a apresentação do Indigente para os calouros de computação da Ufba.

Também pretendo criar o boss do jogo e consertar outro problema: mais uma vez, mesmo com a constante de tempo real, os aliens estão rápidos demais - mais rápidos que a luz. Flash que se cuide! :p

quinta-feira, 9 de setembro de 2010

028 - Space Invaders vai voltar

Decidi por fim aprimorar o space invaders. Depois do processo seletivo confesso que o jogo ficou guardado na gaveta. Daí tentei me dedicar ao flash, mas não consegui (ao meu ver flash so serve para animações frame a frame).

Hoje por exemplo decidi organizar as partes do jogo. Cada coisinha em sua pasta. Logo depois decidi consertar alguns dos problemas da primeira versão do jogo. Um desses problemas é a velocidade. Adicionei mais uma constante aos scripts para que a movimentação se desse em função do tempo real, não dos frames. Computadores mais punks rodam tantos frames a mais que computadores mais fraquinhos que o jogo fica tão rápido que fica impossível jogar.

No tutorial coloquei 6 scripts diferentes para mover os aliens. Combinei todos esses scripts em um único script. Depois que consertar todos os defeitos voltarei a postar sobre o tutorial e ainda comentar das correções feitas. Aguardem por alterações bruscas na hora de fazer o seu space invaders.

quinta-feira, 2 de setembro de 2010

027 - Realidade aumentada e Fapesb

Hoje teve reunião sobre o Indigente submeter projeto para o edital da Fapesb. A ideia seria um jogo envolvendo realidade aumentada e futebol. Acho que posso resumir realidade aumentada nesse video: http://www.youtube.com/watch?v=_ZQpqfzDgOk

Além de discutir propostas de jogo em realidade aumentada, debatemos as "limitações" que o edital coloca: o Indigente teria de se vincular a uma empresa para entrar no edital. A empresa teria de ter condições para suportar a realização do projeto (porte da empresa, equipamento, verba...).

Agora temos a tarefa de construir o plano do projeto: ver essas limitações (inclusive para empresa junior, aproveitando a que temos aqui na UFBA), quais seriam as propostas de jogos para submeter ao edital, ver como esse projeto poderia ser vinculado à copa de 2014 com o comitê da FIFA para a copa na Bahia.

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.

quarta-feira, 14 de julho de 2010

019 - SBgames 2010 (2): Um problema imenso

Depois de um dia traumatizante na faculdade, decido vir ao Indigente para iniciar os trabalhos do jogo no SBgames. Já tenho o Flash instalado - um pacote portátil da versão CS3. O próximo passo é obter a versão mais recente

Além de meus traumas no dia - a - dia da UFBA, ainda tive de ouvir essa: os trabalhos devem ser entregues em 25 de julho (escrevi isto dia 13), e não em novembro como prevíamos.

Agora o grupo pensa em modificar os planos: deixar de fazer isso que falei anteriormente (um "Plague Wars" sobre política) e fazer uma versão 3D de "Miúda e o Guarda - Chuva": antigo projeto do Indigente desenvolvido em Flash.

terça-feira, 13 de julho de 2010

018 - SBgames 2010 (1): Uma nova aventura

Estando, ou não, no indigente, já tenho a minha primeira tarefa no grupo: desenvolver a lógica de jogo de uma aplicação para o Sbgames 2010, voltado para sites de relacionamento, como Orkut.

Para maiores informações, www.sbgames.org

A ideia do jogo é uma campanha eleitoral. Resumindo, uma mistura de DotA com Plage Wars (www.armorgames.com) envolvendo política. Será desenvolvido em Flash, usando ActionScript 3.0. Farei isso junto com Philipe.

Vou instalar o Flash, antes de começar.

Além destes, teremos que fazer a programação de servidor/cliente, interface e Inteligência Artificial.

Os trabalhos começam dia 13/jun.

segunda-feira, 5 de julho de 2010

017 - Space invaders (4): Tiro destrutivo

Demorei mas cheguei. Finalmente, depois de um bom tempo elaborando o jogo, continuaremos o nosso tutorial de Space Invaders.

Na última postagem, vimos como instanciar o tiro, certo? Por enquanto, o tiro não fará nada. Possivelmente irá atravessar o objeto que tocar nele.

Nesse caso, usaremos uma função do unity chamada OnTriggerEnter. Essa função funciona da seguinte forma: o objeto (trigger = gatilho), ao encostar em algum corpo rígido, irá executar os scripts que estiverem na função OnTriggerEnter.

No caso do tiro, o objetivo será destruir alguma coisa.

Vá em Project >> Create >> JavaScript. Renomeie para "ColisaoTrigger".

Para facilitar a sua vida, organize a guia project em pastas. Coloque scripts em uma pasta de scripts, sons em uma pasta de sons, cenas em uma pasta de scenes e assim sucessivamente. Acredite: isso irá ser bastante útil.

Duplo clique em "ColisaoTrigger". O UniSciTE abrirá uma nova janela.

Escreva o script abaixo:

function OnTriggerEnter (other : Collider) {
Destroy(other.gameObject);
Destroy(gameObject);


O que esse script irá fazer:

  • A variável Other é do tipo Collider. Ohter representa outros rigidbodies que possívelmente colidirão com o tiro. Essa função está definida para eles.
  • Destroy(other.gameObject);  Fará com que, quando o tiro colidir, destrua aquele objeto que bateu nele.
  • Destroy(gameObject); Fará com que o tiro também seja destruido, a menos que você queira que o seu tiro faça outras vítimas por um longo tempo.
Ctrl+S para salvar. Aguarde o script compilar.

No prefab do tiro, em Inspector >> Box Collider, marque a caixa Is Trigger.


































Anexe o script ao prefab Tiro. Essa mensagem aparecerá na tela. Clique em "continue".




















O que aconteceu é que os prefabs que estão na cena, se alterados, deixam de ser prefabs. Para alterar um prefab, clique em "Apply", na guia Inspector. Isso irá salvar alterações de seu prefab. Para retornar ao último ajuste salvo do prefab, clique em "Reconnect"











Voltando ao nosso protótipo de nave, ela precisa estar apta a colidir com alguma coisa. Iremos adicionar um script de rigidbody. Clique no objeto da nave.

Vá no menu Component >> Physics >> Rigidbody

Isso irá adicionar o script Rigidbody a nave, permitindo que esta colide com outros objetos em cena.

Há um problema em nosso tiro. Já que ele destruirá tudo aquilo que ele tocar, como o tiro é criado dentro do canhão, este também será destruído e, lógico, não teremos mais tiros. O que é preciso ser feito é instanciar o tiro fora do canhão. Volte ao script "Atirar - Criar Tiro"

var newObject : Transform;
private var x = 1;
function Update () {
    
if
 (Input.GetButtonDown("Fire1")) {
        
Instantiate(newObject, transform.position,transform.rotation);
    
}
}

Altere o script para

var newObject : Transform;
private var x = 1;
function Update () {
    
if
 (Input.GetButtonDown("Fire1")) {
        
Instantiate(newObject, transform.position + Vector3.forward * 55transform.rotation);
    
}
}

Ctrl+S para salvar. Ctrl+P para testar. O tiro irá destruir objetos, mas não destruirá o canhão.

016 - Processo seletivo indigente 11ª Semana - Tudo termina com um som

Para encerrar o desenvolvimento do jogo, so esta faltando o som.

Estou testando com efeitos provisórios a maneira de colocar som no Unity. Depois falarei com Kleber (audio) para passar os sons originais.

Pelo o que eu percebi, a estrutura de som do Unity é baseada em dois componentes: Audio listening e Audio source. O primeiro atua como microfone de captação dos Audio source, que são os sons que irão tocar no jogo. O Unity permite colocar efeitos de 3d no som, que são úteis para jogos em 3d, onde ocorre simulação de som ambiente (efeito tyndall: o som fica menos intenso quando você se distancia, estas coisas.) No caso de Space Invaders, onde isso não ocorre, faz - se necessário desabilitar esta opção, ou o som fica distorcido.

Uma vez colocado o som, agora preciso colocar os comandos para atirar, mover a nave, pausar o jogo.

Por default, o unity faz com que voce atire com ctrl, se mova com as setas ou AWSD. Não tem comando de pause.

A ideia seria mover apenas com esquerda e direita

Já consegui fazer até um menu. Não é o menu mais bonito do mundo, mas é um menu de jogo. Tem até créditos.

Fiz também uma função que interrompe o jogo caso o jogador morra.

Enfim, Space Invaders V1.0.2 (porque a 1.0.1 tá com erro) está finalmente pronto. Com erros (admito), que serão corrigidos no transcorrer do ano, estando ou não no indigente. É o meu compromisso como cabeça deste blog. Por causa disso, farei uma revisão no tutorial de Space Invaders, fazendo algumas correções, e em breve postarei aqui.

Agora vamos aguardar os resultados da apresentação do jogo que ocorre nesta segunda, 5 de julho. Espero que esses três meses de processo seletivo realmente valham a pena.

domingo, 27 de junho de 2010

015 - Projeto indigente 10ª semana - Retoques finais

Ao som de Iron Maiden, decidi fazer uma gambiarra para fazer a nave parar de pular para trás.

Isso é física básica: cada ação corresponde a uma reação. Se eu atiro, logo acabo recuando em virtude da força que a bala imprime ao canhão em resposta a força que o canhão despeja na bala para impulsiona - la.

Vinha tendo problemas com o tiro. Como ele era instanciado dentro do canhão, obrigatóriamente ele tocava no mesmo. Logo, destruia a nave.

Pois bem, finalmente consegui resolver esse problema. E mais uma vez, com uma solução simples.

Aquele script de instanciar, era só modifica - lo de forma a instanciar o tiro um pouco mais a frente. Isso pode ser feito usando a estrutura Vector3.

To comemorando até agora!!! :))

Entramos na reta final do projeto. Coloquei um background provisório providenciado por Danillo "Pitoco". Só falta agora colocar o som.

sexta-feira, 18 de junho de 2010

014 - Os cara de pau - Episódio 2: continuação do início

013 - Projeto Indigente 9ª semana - Tiro funcional

Descobri como fazer as coisas baterem umas nas outras...

Tive problemas com o Unity que me fizeram lembrar de uma coisa: salve antes de testar. Ou então você perde tudo.

Mudei tambem o foco. Ao inves de os aliens atirarem depois de passarem por determinador setor do cenário, coloquei para que eles atirassem depois de um certo tempo de forma ritmada. Ex.: depois de 2 segundos, atirar a cada 2 segundos.

Consegui resolver a questão da colisão entre naves e nave - tiro. Falta agora fazer o tiro parar de destruir tudo o que toca.

Outro problema que precisa ser solucionado é a força de reação que empurra a nave quando esta atira.

terça-feira, 15 de junho de 2010

012 - Os cara de pau: o início de tudo

Conforme havia prometido, aqui estão os vídeos da animação "Os cara de pau". Abaixo segue uma descrição de como isso tudo começou.



Nasceu como uma brincadeira. Minha irmã é design e trabalhava com flash. Daí, vi o programa e comecei a brincar com ele, fazendo animações.

Tinha tambem a ideia de fazer um jogo, só que não sabia programar ainda. Não conhecia linguagem de programação alguma. Não sabia o que era pascal, java, muito menos actionScript.

Nesse caso, como os personagens não poderiam ganhar vida por um usuário em especial, tive de desenvolver, ao inves de um jogo, uma animação.

E deu no que deu.

"Os cara de pau" marca o inicio de um sonho: programar e viver de jogos. Não consigo ficar sem jogar, nem que seja um joguinho ridículo de paciencia. A Ufba me da pelo menos a oportunidade de tentar mostrar valor.

Pretendo em breve desenvolver "Os cara de pau" o jogo, não animação. Pode ser que seja em flash, ou em Unity, que já estou acostumado a trabalhar. Isso será visto mais adiante quando terminar Space Invaders.

Quando isso acontecer, começarei a contar a história deste jogo.

segunda-feira, 7 de junho de 2010

011 - Projeto Indigente 8ª Semana - Ele atirará em breve

Em virtude do feriado prolongado, acredito que ninguem tenha ido ao indigente para tocar os trabalhos. Eu, por exemplo, toquei em casa.

Consegui descobrir um jeito de fazer os aliens atirarem depois de passarem por determinado setor da tela. Vou aprimorar isso e, em breve, colocarei na tag "TUTORIAIS - SPACE INVADERS".

Estou devendo, e não contei, a animação que fiz e apresentei na segunda semana conforme citado no post 001 deste blog.

O que falta agora é desenvolver a lógica de combate: atirar, causar dano, registrar no score, essas coisas.

segunda-feira, 31 de maio de 2010

010 - Projeto Indigente 7ª Semana - Alien não fica parado

Comecei a pensar em como os aliens irão se movimentar.

Por parte do grupo recebi diversas ideias de como fazer os aliens se moverem. Todas as sugestões abominaram a forma clássica do space invaders original. (Matriz, todos juntos, vai p/ esquerda, desce, vai p/ direita, acelera, "vamos matar esse carinha logo, pô!!!")

Não entendeu, acessa aí: www.spaceinvaders.de

Inspirado em jogos como Star Soldier (N64) e, por sugestão de João - indigente, Ikagura (Xbox), decidi tentar reproduzir a movimentação dos inimigos desses jogos. Para se ter uma ideia, digita no youtube.

Já consegui um pequeno avanço. Meu alien vai para a esquerda e faz a curva. Pô!

009 - Projeto Indigente 6ª Semana - Menos um problema para resolver

Enfim o tiro está sumindo.

E quando um grande problemão aparece, a solução sempre é ridícula. Era apenas um problema de assimilar o objeto alvo do script.

A função estava programada para instanciar o objeto que estivesse na cena. Mas ela tambem pode ser programada para objetos que estejam fora da cena, desde que em uma biblioteca.

E agora o tiro some. :)

sexta-feira, 21 de maio de 2010

008 - Space Invaders (3) - Tiro

Aqui faremos a nave atirar (apenas atirar, não desenvolver o poder destrutivo).

A criação de um tiro é, na realidade, um processo chamado no Unity de Instantiate (instanciar). O jogo criará outro game object pre-determinado pelo programador. No nosso caso, o tiro.

Toda nave possui um canhão, certo?

Vá em "GameObject >> Create Other>> Cube" e crie outro cubo.

Nome: "Canhao" (sem til, mesmo).
Scale: x = 1; y = 0,2; z = 1

Esse não será o canhão que o jogador irá ver na tela. Ele será, na verdade, a "fonte geradora" dos disparos da nave.

Vamos, lá. arraste "Canhao" para dentro de "Nave". Você terá algo mais ou menos assim... (clique na imagem para visualização completa)



Para que o canhão fique invisível, vá ma tela "Inspector >> Mesh Renderer >> Materials >> Default - Diffuse"

Mude para "Shadow Material >> Transparent >> Cutout >> Bumped Diffuse"

Alfha Cutout = 0 (todo p/ direita).

Agora vamos criar o tiro própriamente dito (o objeto a ser instanciado).

Para dominar a técnica de instanciar objetos, faremos isso com cubos.

Novamente, "GameObject >> Create Other >> Cube"

Nome: "Tiro"

Scale x = 20; y = 2; z = 100

Mude a textura para "Fire Add" (da mesma maneira que deixamos o canhão transparente)

Shader: "particles >> additive"

Agora o script de tiro. "Project >> Create >> JavaScript"


Nome: "Atirar - mover tiro"


Escreva o script abaixo:


var velocidade = 10;

function Update () {
    transform.Translate(0, 0, velocidade);
    Destroy (gameObject, 5);
}


Este script irá:
  • transform.Translate(0, 0, velocidade); //Mover o objeto criado;
  • Destroy (gameObject, 5); //Destruir o objeto após 5 segundos. Se ele não for destrído, vai dar problema.

Para que a instancia funcione, o objeto precisa ser especial, mais precisamente um Prefab. Para criar um, vá na tela "Project >> Create >> Prefab"

O ícone desse prefab esta cinza, certo? Renomeie para "Tiro".

Pegue o "Tiro" da tela "Hierarchy" e mova - o para dentro do prefab "Tiro".

Agora o ícone esta azul. Que lindo!!!

Agora o script para que o jogador possa atirar. Ele será adicionado ao canhão de "Hierarchy".

Faça o mesmo processo, só que daremos o nome de "Atirar - criar tiro" e colocaremos o script abaixo:

var newObject : Transform;
private var x = 1;

function Update () {
    if
(Input.GetButtonDown("Fire1")) {
        Instantiate(newObject, transform.position, transform.rotation);
    }
}

Agora, sempre que ctrl (default para tiro) for pressionada, a prefab "Tiro" aparecerá no jogo. Automaticamente ela irá se mover por causa do primeiro script já criado.

Adicione este script ao "Canhao".

Em "Inspector >> Atirar - criar tiro(script)" coloque New Object = Assets: Tiro

Ctrl+S para salvar. Ctrl+P para testar. Veja que apertando ctlr sairá um tiro e, depois de 5 segundos, ele desaparecerá da tela (a câmera, depedendo da velocidade do tiro, poderá não ver o tiro sumir).