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).

007 - Space Invaders (2) - Visão geral e nave

Aqui falarei sobre como irá ser a mecânica básica da nave.
  • Terreno
  • Visão do jogador
  • Movendo a nave pela tela
1. TERRENO
Para melhor trabalharmos, criaremos tudo em cima de um terreno provisório. Vá no menu "Terrain --> Create terrain".

Posicione na tela "Inspector >> Transform", position, x=0, y=0, z=0.

Se quiser coloque textura no terreno, mas deixe - o plano!

2. VISÃO DO JOGADOR
Geralmente o unity possui scripts para jogos em primeira pessoa, daí não existe um script que mova apenas o personagem, deixando a câmera fixa. Neste jogo, tentaremos criar uma falsa aparência de 2d com vista de cima.

Basta posicionar a câmera acima do cenário e rotaciona - la em 90 graus. Em "Inspector >> Transform", faça Rotation x = 90.
Na tela "Scene", posicione a câmera como melhor achar conveniente. Oriente - se usando  a tela "Game".

3. MOVENDO A NAVE PELA TELA
Para criar o desenho da nave, pode - se usar um programa de modelagem, pois o Unity não é aconselhavel para tal intuito.

De forma primitiva, usaremos aquilo que o programa pode nos disponibilizar, ou seja, um cubo. Vá ao menu "GameObject >> Create Other >> Cube"
Aperte F2 e renomeie para "Nave"

Na tela "Inspector >> Transform", ajuste as dimensões do cubo: scale x = 200; y = 10; z = 100

Para mover a nave, aí é que entra a parte de programação. Na tela "Project", clique em "Create >> JavaScript."

Aparecerá na mesma tela um script com o nome "NewBehaviourScript". Aperte F2 (Windows) e renomeie para "Mover nave" (coloque outro nome a gosto, desde que não tenha acentuação gráfica.).

Clique duas vezes no script. Abrirá uma nova janela no UniSciTE (programa do Unity para programar scripts):






















Escreva o script abaixo:

var velocidade = 30;

function Update () {
    transform.Translate(Input.GetAxis("Horizontal") * velocidade, 0, 0);
}

Dessa forma a nave se moverá com a velocidade que você determinar sempre que esquerda ou direita (ou A e D) forem pressionados. Por default, ela se moverá à 30 fps, podendo ser alterado fora do script na tela "Inspector".

Aperte Ctrl+S para salvar.

Volte ao unity.

Pegue o script "Mover nave" da tela "Project" e arraste - a para dentro da "Nave" na tela "Hierarchy".

Ctrl+S para salvar. Ctrl+P para testar o jogo.

A princípio a nave se moverá para alem da visão da tela, pois ainda não limitamos por onde ela ira se movimentar. Isso será feito mais adiante.

terça-feira, 18 de maio de 2010

006 - Tocando Space Invaders (1) - Introdução.

Aqui vou falar sobre como estou tentando desenvolver o space invaders para o processo seletivo.

Em programação, basicamente tentarei:
  • Mover a nave
  • Fazer a nave atirar
  • Desenvolver a ai dos aliens e do boss
  • Sistema de levels
  • Desenho do jogo
  • Menu
  • HUD
  • Jogabilidade
Algumas dessas coisas já expliquei nas postagens anteriores, mas nas próximas postagens irei detalhar os processos.

005 - Processo Indigente 5ª semana - Hora de tocar os projetos

Venho tendo um pequeno problema com a programação.

Já resolvi o problema de atirar...

Mas não o de o tiro atingir determinado objeto (ou seja, sumir!)

Logo, dediquei quase o dia todo para tentar eliminar o tiro.

Fiz busca na internet mas nada encontrei.

Acredito que o problema esteja no script de mover o tiro, pois ele move tanto a matéria prima que precisa ser colocada no cenário como o tiro que vou clonar. E quando tenta - se eliminar o clone acabo por eliminar a matéria prima.

Qual seria o plano? Colocar alguma coisa que mate apenas os clones e não a matéria prima.

Os trabalhos foram regados com muitas brincadeiras. MACARRÃO INSTANTÂNEO.

Só estando lá para entender.

004 - Processo Indigente 4ª semana - E o game design ficou bom?

Levamos a documentação de game design para análise.

Constatou - se que o texto estava desorganizado e que o sistema de bonificação estava desigual. E recebemos dicas:

Organizar tudo em 3 tópicos: objetivos, desafios e recompensas

Os objetivos podiam ser subdivididos em primários (objetivo principal do jogo), secundário (objetivos que o jogador terá de cumprir para concretizar o objetivo principal) e terciário (objetivos relevantes mas que poderão ajudar o jogador  em seu objetivo principal)

Quanto aos desafios podemos citar os tipos de desafio que o jogador terá de encarar.

E as recompensas os tipos de powerups e o que eles irão fazer no jogador.

Elder também explicou sobre os tipos de desafios - destreza, resistência... - detectar quais desses desafios seriam colocados no jogo e definir um padrão de força para jogador e aliens.

003 - Processo seletivo 3ª semana - Grupos e projeto

Era para ter mais alguma coisa, mas o instituto de matemática foi fechado por causa do concurso para diplomata. Ninguém entra.

Dividiram - se os grupos. Agora vamos começar a desenvolver a documentação (game design e level design) para uma versão do clássico Space Invaders.

Traduzindo, vamos falar sobre as regras do jogo: o que o jogador tem que fazer, como vai ser o desenho do jogo, controles, personagens, etc.

Tenho no meu grupo, alem de mim (programação), Luísa (roteiro), Kleber (som), Sérgio, Danilo "Pitoko", Nicole, Rafael Villa, George e Jessele.

segunda-feira, 17 de maio de 2010

002 - Processo Seletivo 2ª semana - A Engine

Para aqueles que não sabem o que é uma engine, é basicamente o programa que cria o jogo.

Exemplo: para fazer uma animação, flash.

E para fazer jogo?

Bem, o grupo nos mostrou o Unity3d. Ferramenta para desenvolvimento de jogos bastante simples de usar. Só precisa de um conhecimento básico das áreas de desenvolvimento.

O unity aceita linguagem de programação C#, mono e python. E mesmo eu que nunca programei na vida consigo fazer alguma coisa.

Ao final, brinquei um pouco com o unity. Só fiz um terreno simples, com um monte de chapadas (como a diamantina). Paulo até me perguntou se eu poderia fazer um jogo em uma semana.

Vale a pena tentar...

001 - Processo indigente 1ª semana - Como começar

Começa o processo seletivo para ingressar no indigente. No primeiro dia houve a apresentação dos candidatos no laboratório do dcc. As pretensões, as expectativas...

O grupo também deu-nos informações sobre como seria o processo. Disse também sobre trazer projetos anteriores relacionados a área de interesse (algum trabalho, brincadeira, essas coisas). No meu caso, posso trazer a minha animação - tentativa de jogo em flash.

Também pediu para o próximo dia de avaliação que fizessemos uma pesquisa sobre a área que queríamos seguir, e outras áreas para os indecisos.

Este diário também será levado em conta para o processo

000 - Bem vindo: tudo começa aqui!

Bem vindos ao "Saulo Andrade - Indigente". Aqui contarei as minhas experiências no grupo de desenvolvimento de jogos da Universidade Federal da Bahia.

A princípio de conversa, sou mero aspirante ao grupo: estou tentando entrar. Mas mesmo o processo seletivo já me agrega conhecimento para a vida. Diversas coisas que não conhecia tenho a oportunidade de ver aqui.

Tentarei a vaga como programador. Então se você é aprendiz assim como eu e quer algumas dicas, não desgrude do "Saulo Andrade - Indigente". Se tem alguma dica, comente aqui!