Páginas

sábado, 11 de outubro de 2014

Aula 13 VEICULO VOADOR EM AMBIENTE MULTIPLAYER

VEICULO VOADOR EM AMBIENTE MULTIPLAYER
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.
A idéia que apresentamos nessa lição é termos um jogo em que existem avatares e chat, mas o jogo em si mesmo não é multiplayer! Por exemplo: se o jogador A abre uma porta, ela não é aberta nas outras cópias do jogo!
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, por exemplo no caso do exemplo dessa lição, 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...
No caso da porta aberta/não-aberta, o avatar passará por ela como um fantasma (em quase todas as cópias do jogo). Isso pode ficar meio esquisito...
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:

  • transporte
    • anel
      • base
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:

RIGHTCLICANDO AQUI
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.
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.)
É possível até nem usar o NetworkView e tornar o veículo MENOS MULTIPLAYER AINDA !
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.

Nenhum comentário:

Postar um comentário

Pesquisar