
A comunidade brasileira de desenvolvimento e programação de jogos. |

|
|
| 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... |
|
Enviada: Qua Mai 19, 2010 5:32 pm Assunto: Network - Unity Engine - Primeira Parte |
|
|
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.
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 |
|
 |
| brunox Membro júnior
 | | Registrado em: Quarta-Feira, 21 de Abril de 2010 | | Mensagens: 24 | |
|
Enviada: Qua Mai 19, 2010 5:51 pm Assunto: |
|
|
Legal cara, artigo interessante mesmo. espero logo ler as proximas partes
Abração _________________ nunca desista dos seus sonhos. se não achar numa padaria corra pra próxima! |
|
| Voltar ao Topo |
|
 |
| Tydres Moderador
 | | Registrado em: Domingo, 20 de Mai de 2007 | | Mensagens: 1041 | | Localização: Em algum código fonte... |
|
Enviada: Qua Mai 19, 2010 6:47 pm Assunto: |
|
|
Vlw Bruno. Assim que tiver um tempo do trabalho eu faço o proximo. Abraço! _________________
 |
|
| Voltar ao Topo |
|
 |
| juniorsla Membro júnior
 | | Registrado em: Terça-Feira, 10 de Fevereiro de 2009 | | Mensagens: 46 | |
|
Enviada: Qui Mai 20, 2010 7:59 am Assunto: |
|
|
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 |
|
 |
| Tydres Moderador
 | | Registrado em: Domingo, 20 de Mai de 2007 | | Mensagens: 1041 | | Localização: Em algum código fonte... |
|
Enviada: Qui Mai 20, 2010 8:08 am Assunto: |
|
|
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 |
|
 |
| juniorsla Membro júnior
 | | Registrado em: Terça-Feira, 10 de Fevereiro de 2009 | | Mensagens: 46 | |
|
Enviada: Qui Mai 20, 2010 10:24 am Assunto: |
|
|
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  _________________ Vivendo e aprendendo! |
|
| Voltar ao Topo |
|
 |
| Tydres Moderador
 | | Registrado em: Domingo, 20 de Mai de 2007 | | Mensagens: 1041 | | Localização: Em algum código fonte... |
|
Enviada: Qui Mai 20, 2010 1:05 pm Assunto: |
|
|
Beleza cara. Qualquer coisa tamo ai. Abraço! _________________
 |
|
| Voltar ao Topo |
|
 |
| Ken Ichi Membro júnior
 | | Registrado em: Quarta-Feira, 24 de Março de 2010 | | Mensagens: 45 | |
|
Enviada: Ter Mai 25, 2010 10:59 am Assunto: |
|
|
| tutorial bem detalhado parabens =D |
|
| Voltar ao Topo |
|
 |
| Tydres Moderador
 | | Registrado em: Domingo, 20 de Mai de 2007 | | Mensagens: 1041 | | Localização: Em algum código fonte... |
|
Enviada: Ter Mai 25, 2010 11:25 am Assunto: |
|
|
Vlw Ken Ichi. _________________
 |
|
| Voltar ao Topo |
|
 |
| sandolkakos Membro júnior
 | | Registrado em: Quinta-Feira, 13 de Agosto de 2009 | | Mensagens: 24 | |
|
Enviada: Sáb Jul 10, 2010 2:53 am Assunto: |
|
|
| Otimo Tutorial, valew mesmo... |
|
| Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibído. Responder Tópicos Proibído Editar Mensagens: Proibído. Excluir Mensagens: Proibído. Votar em Enquetes: Proibído.
|
|