A comunidade brasileira de desenvolvimento e programação de jogos.
Bem-vindo: Sex Nov 27, 2020 5:52 am

Todos os horários são GMT - 3 horas




Criar novo tópico Responder  [ 15 mensagens ] 
Autor Mensagem
 Título: Network - Unity Engine - Primeira Parte
MensagemEnviado: Qua Mai 19, 2010 5:32 pm 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
Network
Imagem

Introdução:
Hoje em dia, é praticamente quase impossivel alguem conseguir viver sem comunicação. O mundo gira em torno da informação e estamos sempre nos comunicando com outras pessoas, mesmo que seja por telefone, carta, rádio, televisão. Precisamos enviar e receber informações para que o mundo possa funcionar corretamente. Na área da computanção acontece o mesmo. Sempre que nos conectamos a internet, estamos enviando e recebendo dados a todo momento. mesmo que sejam simples bytes.

A transmição de dados entre computadores feita por pacotes de dados que são transmitidos em informação binária.

//----------------------------------------------------------------------------------//

Entendendo um pacote de dados:

Temos a baixo uma estrutura de um pacote de dados:
----------------------------------------------------------------
1: Protocolo | 2: EdeO | 3: EdeD | 4: PAYLOAD | 5: End -
----------------------------------------------------------------

Vemos que nosso pacote de dados é constituido por 5 partes:

1 - Protocolo
Citação:
Protocolos são como frases a serem ditas por uma maquina para que possa se comunicar com outras maquinas. são um conjunto de normas de identificação padrões para que seja possivel a comunicação entre todas as maquinas.
No caso do nosso pacote, esse protocolo serve para identificar qual é o tipo de mensagem que estamos enviando.

http://pt.wikipedia.org/wiki/Protocolo_ ... %C3%A3o%29

2 - Endereço de Origem
Citação:
Neste campo, está as informações sobre o remetente do pacote.


3 - Endereço de Destino
Citação:
Neste outro campo, contem as informações sobre o nosso destinatário. precisamos de um endereço para que nossa informação possa chegar lá.


4 - PAYLOAD
Citação:
O Payload. É as informações que desejamos enviar em nosso protocolo. como no envio de uma carta, sempre tem uma informação que está sendo transmitida na mesma.

http://pt.wikipedia.org/wiki/Payload

5 - End
Citação:
Para que o receptor possa identificar o final de nossa mensagem. precisamos fazer um conjunto arbitrario que simbolize o final da mensagem.


Agora que já entendem basicamente como é transmitido os dados entre computadores. vamos para a parte pratica utilizando a Unity Engine.

{Para maior entendimento sobre redes de computadores, existem varios livros e artigos espalhados pela web}


//----------------------------------------------------------------------------------//

Unity Engine - Networking
Imagem

Nessa parte do artigo, será mostrado:
Citação:
Criar Servidor
Conectar Cliente
Envio e Recebimento de dados



Criar Servidor

Código:
//CreateServer.js

//----Variables

//ServerVar
protected var serverStatus   : String = "Desconectado!"; //Status do servidor
protected var serverPassword : String = "Senha"; //Senha para autorização de conexão com o servidor
protected var serverClients  : int    = 50;   // Numero maximo de clientes
protected var serverPort     : int    = 2590; //Porta de conexão com o servidor


//----Functions


//FixedUpdate
function FixedUpdate () {

}

//GUI
function OnGUI () {

   //BoxServer
   GUI.Box(Rect(5,5,300,150),"Server");

   //ButtonCreateServer
   if(GUI.Button(Rect(10,10,100,30),"Criar Servidor"))
   CreateServer();
   
   //ServerStatus
   GUI.Label(Rect(120,20,100,20),serverStatus);
   
   //EditServerPassword
   serverPassword = GUI.TextArea(Rect(10,50,200,25),serverPassword);
   
}

//OnServerInitialized
function OnServerInitialized () {

   //SetServerStatus
   serverStatus = "Connected!";
   
}

//CreateServer
function CreateServer () {

   //SetPassword
   Network.incomingPassword = serverPassword; //Seta a senha de conexão
   //IniServer
   Network.InitializeServer(serverClients,serverPort);  // Inicializa o servidor
   
}


Imagem

Este código cria um painel simples de inicialização do servidor.

Código:
Networ.incommingPassword

Esta variavel é responsavel pelo password que o servidor receberá para aceitar as conexões com os clientes.
http://unity3d.com/support/documentatio ... sword.html

Código:
Networ.InitializeServer

Esta função é responsavel por passar a classe Network o password que o servidor receberá para aceitar as conexões com os clientes. O primeiro parametro é o numero maximo de clientes que o servidor irá aceitar. e o segundo a porta de conexão do servidor.
http://unity3d.com/support/documentatio ... erver.html

Estas funções já são suficiente para se criar um servidor com a Unity Engine.

//----------------------------------------------------------------------------------//

Conectar Cliente

Código:
//ConnectToServer.js

//----Variables

//ServerVar
protected var clientStatus   : String = "Desconectado!"; //Status do servidor
protected var serverPassword : String = "Senha"; //Senha para conectar com o servidor
protected var serverIP       : String = "127.0.0.1"; //IP do servidor
protected var serverPort     : int    = 2590; //Porta de conexão com o servidor


//----Functions


//FixedUpdate
function FixedUpdate () {

}

//GUI
function OnGUI () {

   //BoxClient
   GUI.Box(Rect(5,5,300,150),"Client");

   //ButtonConnectToServer
   if(GUI.Button(Rect(10,10,100,30),"Conectar"))
   ConnectToServer();
   
   //ButtonDisconnect
   if(GUI.Button(Rect(120,10,100,30),"Desconectar"))
   DisconnectToServer();
   
   //clientStatus
   GUI.Label(Rect(120,140,100,20),clientStatus);
   
   //EditServerPassword
   serverPassword = GUI.TextArea(Rect(10,50,200,25),serverPassword);
   //EditserverIP
   serverIP       = GUI.TextArea(Rect(10,90,200,25),serverIP);
   
}

//OnConnectedToServer
function OnConnectedToServer () {

   //SetServerStatus
   clientStatus = "Connected!";
   
}

//OnDisconnectToServer
function OnDisconnectedFromServer (disconnectInfo : NetworkDisconnection) {

   //SetServerStatus
   if ( disconnectInfo == NetworkDisconnection.Disconnected )
   clientStatus = "Disconnected!";
   else
   clientStatus = "Connection to server lost!";
}

//ConnectToServer
function ConnectToServer () {

   //ConnectToServer
   Network.Connect(serverIP,serverPort,serverPassword); //Conecta o cliente ao servidor
   
}

//DisconnectToServer
function DisconnectToServer () {
   
   //DisconnectToServer   
   Network.Disconnect();
   
}


Imagem

Este código cria simples tela de conexão com o servidor.

Código:
Networ.Connect

Esta função é responsavel por realizar a conexão com o servidor. O primeiro parametro e o IP do servidor, segundo parametro a porta de conexão, e o terceiro o password para que seja aceita a conexão com o servidor.
http://unity3d.com/support/documentatio ... nnect.html

Código:
Networ.Disconnect

Esta função é responsavel por desconectar do servidor.
http://unity3d.com/support/documentatio ... nnect.html

Como podem ver, é bem simples conectar a um servidor com a Unity Engine.

Funções responsaveis por estados das conexões:
Citação:
OnPlayerConnect -> Executada quando o cliente estiver conectado.
OnServerInitialized -> Executada quando se tem sucesso na inicialização do servidor.
OnConnectedToServer - > Executada quando o cliente estiver conectado com o servidor.
OnPlayerDisconnected -> Executada quando o cliente desconectar do servidor.
OnDisconnectedFromServer -> Executada quando o servidor se desconectar ou o cliente perder a conexão.
OnFailedToConnect -> Executada quando o cliente tiver falha ao se conectar.
OnFailedToConnectToMasterServer -> Executada quando o cliente ou o servidor tiver problema ao conectar com o servidor master.
OnNetworkInstantiate -> Executada quando objetos forem instanciados com o Network.Instantiate
OnSerializeNetworkView -> Executada para a sincronia de variaveis com scripts em uma network view


Veja a referencia da classe Network
http://unity3d.com/support/documentatio ... twork.html
Referencia do NetworkView
http://unity3d.com/support/documentatio ... kView.html

//----------------------------------------------------------------------------------//

Envio e recebimento de dados:

Para o envio e o recebimento de dados. A Unity Engine tem como disponibilidade o metodo RPC(Remote Procedure Calls ou Chamada de Procedimentos Remotos). Que constitui em chamar uma função armazenada no Cliente e passar para ela os parametros desejados. E assim executando as funções a ela atribuida. Para a utilização do RPC, é necessario que o objeto que terá o script de funções de receptação RPC contenha o objeto networkView.

Criando o RPC:

Código:
@RPC
function MoveObject( pos : Vector3 )
{
     obj.transform.position = pos;
}

Definimos o RPC em um script ativo no cliente.

Chamar o RPC:

Código:
networkView.RPC ("MoveObject", "RPCMode.All", car.transform.position);


http://unity3d.com/support/documentatio ... w.RPC.html
http://unity3d.com/support/documentatio ... Guide.html
http://unity3d.com/support/documentatio ... rview.html
http://unity3d.com/support/documentatio ... ments.html
http://unity3d.com/support/documentatio ... kView.html
http://unity3d.com/support/documentatio ... tails.html
http://unity3d.com/support/documentatio ... ation.html
http://unity3d.com/support/documentatio ... tiate.html
http://unity3d.com/support/documentatio ... lLoad.html
http://unity3d.com/support/documentatio ... erver.html
http://unity3d.com/support/documentatio ... Build.html
http://unity3d.com/support/documentatio ... width.html

Dessa forma podemos fazer com que o objeto possa ser sincronizado com as informações vindas do servidor, e enviadas ao mesmo para serem processadas.

Bom espero que tenha ajudado a galera a compreender o sistema de conexão da Unity Engine. Irei fazer uma segunda parte desse artigo para um melhor aprofundamento no assunto.

Flw Abraço!

_________________
Imagem


Editado pela última vez por Tydres em Qua Mai 19, 2010 6:19 pm, em um total de 1 vez.

Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qua Mai 19, 2010 5:51 pm 
Offline
Membro júnior
Avatar do usuário

Registrado em: Qua Abr 21, 2010 5:39 pm
Mensagens: 24
Legal cara, artigo interessante mesmo. espero logo ler as proximas partes :D

Abração

_________________
nunca desista dos seus sonhos. se não achar numa padaria corra pra próxima!


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qua Mai 19, 2010 6:47 pm 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
Vlw Bruno. Assim que tiver um tempo do trabalho eu faço o proximo. Abraço!

_________________
Imagem


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qui Mai 20, 2010 7:59 am 
Offline
Membro intermediário
Avatar do usuário

Registrado em: Ter Fev 10, 2009 7:39 pm
Mensagens: 67
Otimo tutorial Tydres xD
boa !
eu estou começando na Unity xD to gostando pakaS xXD
muito bom mesmo...
entao uma coisa que eu nao entendi muito bem
o IP pode ser o do meu pc mesmo? ou o do NoIp?
por que eu fazia quase a mesma coisa pra conectar o server de MU....
éra masi o menos assim ai eu querisa saber se eu posso fazer um teste apenas com estes scripts tipo, uma versao online do jogo de carros que estou fazendo xD
vlw ae
muito bom continua ... xD
abrazzz

_________________
Aquele que botar as mãos sobre mim, para me governar, é um usurpador, um tirano. Eu o declaro meu inimigo.


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qui Mai 20, 2010 8:08 am 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
Obrigado Junior. Sim o IP de conexão que o cliente irá usar é o IP de onde o servidor estiver rodando. caso esteja rodando na sua casa usa o da sua casa. Qualquer coisa tamos ai. Abraço!

_________________
Imagem


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qui Mai 20, 2010 10:24 am 
Offline
Membro intermediário
Avatar do usuário

Registrado em: Ter Fev 10, 2009 7:39 pm
Mensagens: 67
brigado Tydres
vou estudar mais e masi xD se preciso perderei dias de sono mas nao deixo
de tentar aprender oq quero nunca xD
vlw
abraz :D

_________________
Aquele que botar as mãos sobre mim, para me governar, é um usurpador, um tirano. Eu o declaro meu inimigo.


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Qui Mai 20, 2010 1:05 pm 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
Beleza cara. Qualquer coisa tamo ai. Abraço!

_________________
Imagem


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Ter Mai 25, 2010 10:59 am 
Offline
Membro júnior
Avatar do usuário

Registrado em: Qua Mar 24, 2010 4:44 pm
Mensagens: 45
tutorial bem detalhado parabens =D


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Ter Mai 25, 2010 11:25 am 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
Vlw Ken Ichi.

_________________
Imagem


Voltar ao topo
 Perfil  
 
 Título:
MensagemEnviado: Sáb Jul 10, 2010 2:53 am 
Offline
Membro júnior
Avatar do usuário

Registrado em: Qui Ago 13, 2009 8:10 pm
Mensagens: 26
Otimo Tutorial, valew mesmo...


Voltar ao topo
 Perfil  
 
 Título: Re: Network - Unity Engine - Primeira Parte
MensagemEnviado: Dom Jan 15, 2012 7:18 pm 
Offline
Membro novo

Registrado em: Sáb Jan 14, 2012 1:20 am
Mensagens: 2
estou fazendo um jogo onde o boneco é escolhido e começa em uma ambiente onde ele pode se comunicar com as demais pessoas esse tipo de conexão poderia me ajudar em um projeto desse tipo? lembrando q irei alugar um espaço de servidor para colocar o o jogo em sima e deponibilisar um path para os jogadores jogarem em sua casa como em outros jogo como jogos da leve up etc esse tipo de conexão seria feita assim mesmo?


Voltar ao topo
 Perfil  
 
 Título: Re: Network - Unity Engine - Primeira Parte
MensagemEnviado: Qui Mar 28, 2013 12:33 pm 
Offline
Membro veterano
Avatar do usuário

Registrado em: Dom Mai 20, 2007 8:42 am
Mensagens: 1114
Localização: Belo Horizonte
Que bom que gostaram.

Agradeço amigos,

Abraço.

_________________
Imagem


Voltar ao topo
 Perfil  
 
 Título: Re: Network - Unity Engine - Primeira Parte
MensagemEnviado: Qua Mai 22, 2013 10:51 pm 
Offline
Membro novo
Avatar do usuário

Registrado em: Qui Jul 15, 2010 6:58 pm
Mensagens: 4
Localização: Fortaleza - CE
eae cara, nao tem mais? tou ansioso por ele :)

eu até tenho umas coisinhas feitas, mas tou preso na parte de matar um outro jogador kk

_________________
Eu quero fazer uma jogo de video-game!!!


Voltar ao topo
 Perfil  
 
Exibir mensagens anteriores:  Ordenar por  
Criar novo tópico Responder  [ 15 mensagens ] 

Todos os horários são GMT - 3 horas


Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante


Enviar mensagens: Proibido
Responder mensagens: Proibido
Editar mensagens: Proibido
Excluir mensagens: Proibido
Enviar anexos: Proibido

Ir para:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traduzido por: Suporte phpBB