
Vamos começar fazendo o download de um novo pacote:
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:
LIÇÃO ANTERIOR PRÓXIMA LIÇÃO ÍNDICE HOME PAGE