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