Páginas

sábado, 11 de outubro de 2014

Aula 11 porta pivotante

ABRINDO UMA PORTA PIVOTANTE
Alguém muito ingênuo pode pensar que, se colocarmos um objeto num "espaço multiplayer" e um jogador movê-lo ele vai se mover em todos os jogos (dos outros jogadores). Não é nada disso! Não existe "espaço multiplayer"! Isso é uma ilusão que nós programadores de jogos criamos. O que existem são cópias do jogo nos diversos computadores da "rede de jogadores logados". Nõs temos que programar, geralmente usando RPCs, a "propagação" do movimento de um objeto.
NOTA: Eventualmente pode ser interessante criar um objeto cujo comportamento não se propaga. Por exemplo: tem um saco com moedas no cenário. O jogador A pega o saco em sua cópia do game. O saco pode desaparecer em todos os jogos ou ficar nas outras cóias para outros jogadores (B, C etc.)poderem pegar também o dinheiro.
Já apresentamos uma aula em que ensinamos como abrir uma porta. Nessa aula vamos repetir o mesmo ato, só que aqui a porta tem que se abrir em todas as cópias dum jogo.
Reveja aquela aula pois aqui já vamos começar mostrando o script que deve ser acoplado no GameObject que chamamos de "portaBasculante1".
IMPORTANTE: Não deixe de colocar um NetworkView no GO.



Veja então o script, que não tem grandes novidades (se você estudou todas as nossas lições):

var abertaPorta1 =0; 

function OnMouseDown() {
 networkView.RPC("AbrePorta1", RPCMode.All);
}

@RPC
function AbrePorta1(){
 var porta1 = GameObject.Find("portaBasculante1");
 if(abertaPorta1==0){
  porta1.transform.Rotate(0,90,0);
  abertaPorta1=1;
 }
 else{
  porta1.transform.Rotate(0,-90,0); 
  abertaPorta1=0;
 }
}
Interessante reparar que, se a porta está aberta e um novo jogador entrar no jogo, "sua" porta estará aberta. Isso porque o NetworkView (com a opção default: "Reliable Delta Compressed") cria a "bufferização", continuando a transmitir a posição da porta para novos jogadores. Claro que isso gasta muita CPU e linha... Mas precisa ser feito.

Nenhum comentário:

Postar um comentário

Pesquisar