GameDev Brasil
A comunidade brasileira de desenvolvimento e programação de jogos.
 
Home - Fórum - Tutoriais - Projetos - Galeria - Contato

 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar   PerfilPerfil   EntrarEntrar 

Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   

Network - Unity Engine - Primeira Parte

 
Novo Tópico   Responder Mensagem    GameDev Brasil -> Tutoriais de Programação
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Tydres
Moderador
Registrado em: Domingo, 20 de Mai de 2007
Mensagens: 1041
Localização: Em algum código fonte...
MensagemEnviada: Qua Mai 19, 2010 5:32 pm    Assunto: Network - Unity Engine - Primeira Parte Responder com Citação

Network


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_%28ci%C3%AAncia_da_computa%C3%A7%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


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
   
}




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/documentation/ScriptReference/Network-incomingPassword.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/documentation/ScriptReference/Network.InitializeServer.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();
   
}




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/documentation/ScriptReference/Network.Connect.html

Código:
Networ.Disconnect

Esta função é responsavel por desconectar do servidor.
http://unity3d.com/support/documentation/ScriptReference/Network.Disconnect.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/documentation/ScriptReference/Network.html
Referencia do NetworkView
http://unity3d.com/support/documentation/ScriptReference/NetworkView.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/documentation/ScriptReference/NetworkView.RPC.html
http://unity3d.com/support/documentation/Components/Network%20Reference%20Guide.html
http://unity3d.com/support/documentation/Components/net-HighLevelOverview.html
http://unity3d.com/support/documentation/Components/net-UnityNetworkElements.html
http://unity3d.com/support/documentation/Components/net-NetworkView.html
http://unity3d.com/support/documentation/Components/net-RPCDetails.html
http://unity3d.com/support/documentation/Components/net-StateSynchronization.html
http://unity3d.com/support/documentation/Components/net-NetworkInstantiate.html
http://unity3d.com/support/documentation/Components/net-NetworkLevelLoad.html
http://unity3d.com/support/documentation/Components/net-MasterServer.html
http://unity3d.com/support/documentation/Components/net-MasterServerBuild.html
http://unity3d.com/support/documentation/Components/net-MinimizingBandwidth.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!
_________________





Editado pela última vez por Tydres em Qua Mai 19, 2010 6:19 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
brunox
Membro júnior
Registrado em: Quarta-Feira, 21 de Abril de 2010
Mensagens: 24
MensagemEnviada: Qua Mai 19, 2010 5:51 pm    Assunto: Responder com Citação

Legal cara, artigo interessante mesmo. espero logo ler as proximas partes Very Happy

Abração
_________________
nunca desista dos seus sonhos. se não achar numa padaria corra pra próxima!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email MSN Messenger
Tydres
Moderador
Registrado em: Domingo, 20 de Mai de 2007
Mensagens: 1041
Localização: Em algum código fonte...
MensagemEnviada: Qua Mai 19, 2010 6:47 pm    Assunto: Responder com Citação

Vlw Bruno. Assim que tiver um tempo do trabalho eu faço o proximo. Abraço!
_________________



Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
juniorsla
Membro júnior
Registrado em: Terça-Feira, 10 de Fevereiro de 2009
Mensagens: 46
MensagemEnviada: Qui Mai 20, 2010 7:59 am    Assunto: Responder com Citação

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
_________________
Vivendo e aprendendo!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Tydres
Moderador
Registrado em: Domingo, 20 de Mai de 2007
Mensagens: 1041
Localização: Em algum código fonte...
MensagemEnviada: Qui Mai 20, 2010 8:08 am    Assunto: Responder com Citação

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!
_________________



Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
juniorsla
Membro júnior
Registrado em: Terça-Feira, 10 de Fevereiro de 2009
Mensagens: 46
MensagemEnviada: Qui Mai 20, 2010 10:24 am    Assunto: Responder com Citação

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 Very Happy
_________________
Vivendo e aprendendo!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Tydres
Moderador
Registrado em: Domingo, 20 de Mai de 2007
Mensagens: 1041
Localização: Em algum código fonte...
MensagemEnviada: Qui Mai 20, 2010 1:05 pm    Assunto: Responder com Citação

Beleza cara. Qualquer coisa tamo ai. Abraço!
_________________



Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
Ken Ichi
Membro júnior
Registrado em: Quarta-Feira, 24 de Março de 2010
Mensagens: 45
MensagemEnviada: Ter Mai 25, 2010 10:59 am    Assunto: Responder com Citação

tutorial bem detalhado parabens =D
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Visitar a homepage do Usuário
Tydres
Moderador
Registrado em: Domingo, 20 de Mai de 2007
Mensagens: 1041
Localização: Em algum código fonte...
MensagemEnviada: Ter Mai 25, 2010 11:25 am    Assunto: Responder com Citação

Vlw Ken Ichi.
_________________



Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar Email Visitar a homepage do Usuário Yahoo Messenger MSN Messenger
sandolkakos
Membro júnior
Registrado em: Quinta-Feira, 13 de Agosto de 2009
Mensagens: 24
MensagemEnviada: Sáb Jul 10, 2010 2:53 am    Assunto: Responder com Citação

Otimo Tutorial, valew mesmo...
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    GameDev Brasil -> Tutoriais de Programação Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibído.
Responder Tópicos Proibído
Editar Mensagens: Proibído.
Excluir Mensagens: Proibído.
Votar em Enquetes: Proibído.


Powered by phpBB © 2001, 2002 phpBB Group
Traduzido por: Suporte phpBB
Igloo Theme Version 1.0 :: Created By: Andrew Charron