INDO PELOS ARES

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

RIGHTCLICANDO AQUI

Nele você vai encontrar vários presentes:

Outra coisa que vamos usar nessa aula é aquele pacote de explosões que você já deve ter baixado da parte final dessa lição.

Importe esses dois pacotes para seu projeto.

A primeira coisa que vamos fazer é colocar a mira (aim) no meio da interface do jogo, excluindo o ponteiro do mouse. Crie um gameobject vazio (pode chamá-lo de "GUI") e coloque, nele, esse script:

 
var mira : Texture2D;
var posicao : Rect;
function Start(){
Screen.showCursor = false; //para sumir com o ponteiro
posicao = Rect(( Screen.width - mira.width )/2,(Screen.height-mira.height)/2,mira.width,mira.height);
}
function OnGUI(){
GUI.DrawTexture(posicao,mira);
}

Arraste a textura "aim" para a variável "mira" - na divisória Inspector, com o gameobject "GUI" selecionado.

Se você fizer algum teste agora, vai ver que o tiro está "desregulado" em relação à mira. Vamos acertar isso.

Arraste o "rocketLauncher" para uma view, dê um Reset nele e, na divisória Hierarchy, coloque-o como "filho" da Main Camera.

Aí, vá movimentando ele nas views, até que apareça de uma forma adequada na view "Game":

Na aula anterior criamos aquele gameobject vazio chamado "balaPai", que define a posição de instancialização da "balaFilha". Coloque agora esse gameobject na frente do cano do "rocketLauncher" (veja na figura acima).

Agora vamos substituir aquela esfera que usamos como bala pelo "rocket". Arraste-o para uma view e coloque um BoxCollider e um Rigidbody nele. Deixe o "Use Gravity" sem ser setado. Feito isso, arraste-o para cima do prefab "balaFilha" na divisória "Project". Apague a cópia no "Hierarchy".

Agora você vai ter um trabalhinho de ir calibrando sua mira, movendo e girando o gameobject "balaPai" até que o tiro saia mais ou menos dentro da mira, para tiros a uma distância de uns 5 metros (para tiros muito perto do avatar, não vai ficar muito bom - mas ninguém vai atirar no próprio pé...).

Veja em nossa demo que conseguimos esse mais ou menos. O problema é que, nossos "rockets" não têm gravidade e ficam flutuando, após atingirem as paredes. Vamos acertar isso logo:

PARA DEMO:CLIQUE AQUI!

No nosso Curso Básico, já trabalhamos com uma bazuca e depois com um canhão, nessa lição, em que criávamos uma explosão quando atirávamos em algum lugar, e fazíamos, objetos em volta dela, sofrer o impacto. Usamos as funcões OverlapSphere e AddExplosionForce. Aqui vamos fazer coisa semelhante. Uma diferença é que colocaremos o script no prefab "balaFilha". Outra diferença é que usaremos: OnCollisionEnter e não OnTriggerEnter. Já falamos do OnCollisionEnter no Reference da Classe Collider nessa lição.

O script é:

var explosao : Transform; //Arrastar prefab no Inspector
public var radius  = 0.1;
public var  power  = 1.0;

function OnCollisionEnter( colisao : Collision ){
var contact : ContactPoint = colisao.contacts[0];
var rotation = Quaternion.FromToRotation( Vector3.up, contact.normal );
Instantiate(explosao, contact.point, rotation );
var colliders: Collider[] = Physics.OverlapSphere (gameObject.transform.position, radius );
  for (var hitx: Collider in colliders) 
     if(hitx.rigidbody) hitx.rigidbody.AddExplosionForce(power, gameObject.transform.position, radius, 3.0);
Destroy( gameObject );
}

Arrastar o prefab da explosão "Detonator-Sounds", para a variável.

Repare que estamos auto-destruindo a bala na hora da explosão.

Coloque vários barris e tubos de oxigênio na sala da "Base", não esquecendo de colocar Colliders e Rigidbodies neles. Aí, você vai poder brincar com algo semelhente a nossa demo, detonando esses objetos.

PARA DEMO:CLIQUE AQUI!



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