
Se os Estados Unidos tinham criado o avião invisível aos radares e agora a China fez o seu, nós estamos criando um "Veículo DMU" que só é visível pelo seu dono.
Nós inventamos isso para diminuir a quantidade de polígonos que têm que ser re-renderizados a cada segundo em todas as cópias dos jogos. O inconveniente é que, se cada jogador não estaciona seu veículo num lugar determinado (sua "vaga de garagem") um outro avatar, com ou sem seu veículo, pode lhe dar uma bela trombada, o que pode ser dificil de consertar...
Mas vamos começar do início. passo a passo:
Com nossa tradicional incapacidade para modelagem e como nossos avatares não sentam (até poderiam ter essa animação), criamos no Blender um veículo voador para um passageiro e que parece um balcão (varanda) ou podemos dizer que é apenas um quadrado voador:
Importante ressaltar que os submeshes ficam uns dentro dos outros na sequência:
DICA: O charme fica por conta da fumacinha que sai do escapamento, que já vem pronta (precisa uns pequenos ajustes) no pacote da Unity que você pode baixar:
Para nosso veículo ter um comportamento "físico" (trombar, pousar etc.) adicionamos ao "transporte", além de um "box collider", um "rigidbody". Veja na figura que a gravidade está desligada.
Para o "transporte" se movimentar (e com isso o veículo todo), acoplamos um script muito simples que define o uso das teclas: "J","L","I","K","N" e "M". Veja o script:
function Update(){
rigidbody.angularVelocity.y= Input.GetAxis("JL");
rigidbody.velocity = transform.forward *Input.GetAxis("IK");
rigidbody.velocity.y = Input.GetAxis("NM");
}
Já falamos da criação desses "axes" que é feita abrindo o "Input Manager" (Edit |Project Settings | Input) e aumentando o número de axes, o que cria cópias do último, que devem ser mudadas.
No "anel" temos que definir um BoxCollider com o "IsTrigger" setado pois, quando o avatar encostar nele, isso vai disparar certas ações que são definidas num script.
O mais importante aqui é que, colocamos um NetworkView no "anel" mas trocamos o "Observed", arrastando o nome do script:
Isso faz com que as variáveis etc. do script se propaguem, mas não temos propagação do mesh (o que faz o veículo ficar invisível.)
Veja o script acoplado ao "anel":
var contrAv: ControladorAvatares;
var avatar:GameObject;
var ligado = "N";
var entrante: String;
function OnTriggerEnter (other : Collider){
entrante = Network.player.ToString();
if(Network.isServer) entrante ="0";
avatar =other.gameObject;
if(avatar.name == "Player" +entrante+"(Clone)") ligado = "S";
}
function LateUpdate(){
if(ligado =="S" && avatar != null){
contrAv.gravidade = 0;
avatar.transform.position.y = GameObject.Find("transporte").transform.position.y;
avatar.transform.position.x = GameObject.Find("transporte").transform.position.x;
avatar.transform.position.z = GameObject.Find("transporte").transform.position.z;
avatar.transform.localRotation = GameObject.Find("transporte").transform.localRotation;
}
value =Input.GetKey("f");
if(value) networkView.RPC("Desliga", RPCMode.All,entrante);
}
@RPC
function Desliga(ent:String){
entrante = Network.player.ToString();
if(Network.isServer) entrante ="0";
if(entrante==ent){
avatar = null;
ligado = "N";
contrAv.gravidade = 20;
}
}
Repare como as coisas acontecem: quando o avatar entra no veículo (encosta no "anel"), ele seta a variável "ligado" o que faz com que, o movimento do avatar seja o movimento do veículo.
IMPORTANTE: Nós estabelecemos uma ligação com o script controlador de avatares (que está no GO Administracao) para tirar a gravidade do avatar quando está voando.
Quando se chega ao destino, apertando a tecla "f" (de free), o avatar pode sair do veículo.
Baixe a demo zipada :
Veja video de nosso teste. (Requer o Windows Media Player - gratuito - instalado). Rightclique para "tela inteira".
Na próxima lição você vai ganhar um presente!
LIÇÃO ANTERIOR SEGUINTE ÍNDICE HOMEPAGE
