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.

Nenhum comentário:

Postar um comentário