METRALHADORA FAZ MAL À SAÚDE

Vamos começar fazendo o download de um novo pacote:

RIGHTCLICANDO AQUI

Nele você vai encontrar mais presentes:

Importe esse pacote para seu projeto.

Você já deve ter percebido que agora nosso herói não vai ficar tão à vontade. Pode ter problemas de saúde, se for atingido por uma bala da metralhadora automática - donde poderá precisar usar um "health pack".

No nosso Curso Básico, já aprendemos a criar um campo na interface do jogo, que vai mostrar o valor da saúde do jogador nessa lição.

Donde vamos criar um script chamado "saude.js" e acoplar àquele prefab que chamamos de "GUI":

 
var saude = 100;
 
function OnGUI(){
 GUI.Label (Rect (10,10,80,20), "SAÚDE:");
 GUI.TextField (Rect (90,10,65,20), saude.ToString());
}

Lembre-se que, para que seu texto apareça com caracteres "brasileiros", no editor do script (UniScite) selecione: File | Encoding | UTF-8 with BOM. Antes de digitar o texto e salvar, claro.

Como nosso herói pode ser "morto" (saúde=0), vamos estabelecer que, quando isso acontecer ele volta a um ponto inicial do jogo, perto do avião (supondo que ele tenha chegado nele). Vamos então criar um gameobject vazio, que chamaremos de "PontoInicial", e colocar lá. Arrastamos o "First Person Controller" para perto desse ponto.

Agora, vamos à metralhadora. Sugerimos que a coloque escondida atrás da porta do galpão. Assim, nosso herói não a vai ver e, se entrar , pode ser atingido - coitado!.

Coloque nela um BoxCollider e um Rigidbody (sem gravidade), para poder ser ecertada pelos mísseis.

Nós já aprendemos a trabalhar com "rays" em nosso Curso Básico. Eles aparecem em várias lições, inclusive no Reference. Trabalhar com o comando Raycast, que cria um "ray", é meio esquisito(?) porque usamos sempre duas linhas de código:

  
var  hit:RaycastHit;
Physics.Raycast(origem, direção, hit) 

Podemos usar um "ray" como um tiro, apesar de não existir uma bala, no caso. Normalmente colocamos um gameobject vazio na frente do cano da arma e acoplamos um script com o Raycast, em que a origem é a transfom.position desse gameobject e a direção é um transform.forward.

O que vai interessar mesmo é usar o "hit" para captar informações do objeto atingido (só vale para o primeiro). Temos: hit.collider, hit.distance etc. (ver no Reference citado acima).

Então, iremos usar um "ray" para tiro de nossa metralhadora. Serão tiros internitentes, até a metralhadora ser destruida. Como não vemos a bala, usaremos o som de tiros internitentes que recebemos de presente no pacote. Já ensinamos como usar som em nosso Curso Básico, nessa lição. Esse som é posicional e aumenta seu volume quando o jogador chega perto da metralhadora.

Quando um tiro atinge nosso herói, não o mata. Apenas diminui sua saúde em 10%. Como os tiros são internitentes, dificilmente ele receberá apenas um tiro.

Vejamos como ficou o script que acoplamos no gameobject vazio criado na frente do cano da metralhadora:

public var sa:saude; //Arrastar o "GUI" para cá -  gameobject que contem o script saude.js
var posMet: String; 
var somClip: AudioClip; //Arrastar o som para cá
 
function Start(){
 posMet =GameObject.Find("sentryGun").transform.position.ToString();
 audio.clip = somClip; 
 audio.Play(); 
 audio.loop = true  ;
}
 
function  Update (){
 if(GameObject.Find("sentryGun").transform.position.ToString() == posMet){
  
  var  hit:RaycastHit;
  Physics.Raycast(gameObject.transform.position,gameObject.transform.forward, hit) ; 
  if(hit.collider.gameObject.name == "First Person Controller" ){
   sa.saude = sa.saude - 10;
 
   if(sa.saude<=0){
    hit.collider.gameObject.transform.position = GameObject.Find("PontoInicial").transform.position ;
    sa.saude = 100;
   }
  }
 }
 if(GameObject.Find("sentryGun").transform.position.ToString() != posMet) {
   GameObject.Find("sentryGun").rigidbody.useGravity = true;
   audio.mute=true;
 }
}

Repare que capturamos a posição inicial da metralhadora (sem gravidade, para essa posição ser exata); e, ela só vai funcionar se não tiver saído dessa posição - certamente por um tiro do "lança mísseis".

Para que nosso heróis possa recuperar a parte de sua saúde perdida, existe o kit de primeiros socorros que é meio mágico.

Quando a pessoa chega perto dele, se cura completamente. Já aprendemos a usar "proximidade" quando criamos a "porta automática" nessa lição.. O script a ser colocado no kit é bem simples;

public var sa:saude; //Arrastar o "GUI" para cá -  gameobject que contem o script saude.js
 
function Update(){
 if(Vector3.Distance(GameObject.Find("First Person Controller").transform.position,transform.position)< 1 ) 
   sa.saude=100;
}

Você pode fazer o exercício dessa lição colocando várias metralhadoras na "Base", assim como kits de saúde. Nós colocamos só um de cada na nossa demo:

PARA DEMO:CLIQUE AQUI!



LIÇÃO ANTERIOR PRÓXIMA LIÇÃO
ÍNDICE HOME PAGE