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.