Criando um jogo multiplayer no Unity 3D com Photon Unity Networking – Parte 01
Olá a todos
desenvolvedores e interessados no mundo dos games! Nesta primeira série
de artigos irei apresentar como trabalhar com o framework Photon Unity
Networking (PUN) para a criação de jogos multiplayer desenvolvidos na
famosa game engine Unity 3D. Abordaremos desde sua instalação até a
troca de mensagens entre os jogadores, através da experiência que tive
ao usá-lo.
Criar um jogo multiplayer pode se tornar uma tarefa muito complexa. Existem inúmeras configurações complexas cliente/servidor a serem realizadas que acabam por estender em muito o tempo de desenvolvimento.
Uma das grandes vantagens da game engine Unity é sua grande variedade de plugins que auxiliam o desenvolvimento, e em busca de um desses plugins para a criação de um multiplayer da versão digital do TRENCH, encontrei o Photon Unity Networking (PUN).
O PUN, da desenvolvedora Exit Games, é um framework poderoso para a criação de jogos multiplayer em tempo real, tendo seu código otimizado e uma série de outros recursos. Vale antes ressaltar que a Exit Games possui outros produtos, então é necessário avaliá-los e ver qual atende às necessidades do seu jogo. Para mais informações acesse o site da Exit Games.
Ao utilizar o PUN, fica muito mais fácil e rápido implementar o multiplayer em seus jogos, evitando inúmeras configurações. Dentre as principais vantagens se destacam:
Em seguida, será necessário efetuar um cadastro básico na Exit Games para ter acesso a sua dashboard e então gerenciar suas aplicações. Para tal, acesse o site da Exit Games, entre com seu e-mail e complete o cadastro. Após tê-lo efetuado será possível acessar sua dashboard e as informações de suas apps.
Por último, será necessário configurá-lo na Unity. Para acessar o wizard do PUN, acesse o menu Window>Photon Unity Networking e então clique em “setup”. Caso já tenha efetuado o cadastro, clique em “Setup” novamente e entre com seu AppId. Nesse wizard também é possível escolher uma região padrão ao qual seus jogadores irão se conectar. Para finalizar, clique em “Save” e pronto, o PUN está configurado e pronto para ser utilizado!
public class className : MonoBehaviour
Para isso:
public class className : Photon.MonoBehaviour
Feito isso na sua classe, poderemos usar as funções da Photon sem erros.
Há também outros métodos de se conectar a um servidor Photon, como a seguinte linha:
OBS.: Conectando jogadores a diferentes regiões cria-se grupos de jogadores, ou seja, um jogador conectado a um servidor de uma região não conseguirá jogar com um outro conectado a outra região. Os servidores de cada região não se comunicam entre si.
OBS.: As atualizações não são suavizadas ou interpoladas, pois a sincronização é chamada de acordo com o sendRate, que por padrão é 15 vezes por segundo. É possível alterar a frequência de atualização, mas quanto maior, mais largura de banda será necessário, podendo causar problemas. Para alterar esse valor utilize PhotonNetwork.sendRate = X;.
No próximo artigo da série irei tratar sobre troca de mensagens entre os jogadores através de métodos RPCs (Remote Procedure Calls) e sobre Métodos CallBack que facilitam a administração do jogo.
Então, até a próxima!
Criar um jogo multiplayer pode se tornar uma tarefa muito complexa. Existem inúmeras configurações complexas cliente/servidor a serem realizadas que acabam por estender em muito o tempo de desenvolvimento.
Uma das grandes vantagens da game engine Unity é sua grande variedade de plugins que auxiliam o desenvolvimento, e em busca de um desses plugins para a criação de um multiplayer da versão digital do TRENCH, encontrei o Photon Unity Networking (PUN).
O PUN, da desenvolvedora Exit Games, é um framework poderoso para a criação de jogos multiplayer em tempo real, tendo seu código otimizado e uma série de outros recursos. Vale antes ressaltar que a Exit Games possui outros produtos, então é necessário avaliá-los e ver qual atende às necessidades do seu jogo. Para mais informações acesse o site da Exit Games.
Ao utilizar o PUN, fica muito mais fácil e rápido implementar o multiplayer em seus jogos, evitando inúmeras configurações. Dentre as principais vantagens se destacam:
- Sem servidores – Não é necessário configurar servidores e nenhum host, o PUN trabalha através da tecnologia SaaS;
- Clouds disponíveis em diferentes regiões – No total são 5 regiões diferentes disponíveis em todo o mundo, assim minimizando possíveis problemas de latência entre os jogadores;
- Suporta todas as plataformas – Além de suportar exportação pra qualquer plataforma, todas interagem umas com as outras.
Instalando e configurando
Para instalar o Photon Unity Network, basta acessar sua página na Asset Store e importá-lo para a Unity. Na Asset Store encontra duas versões do plugin, uma gratuita e uma paga; no entanto, a única característica que as diferenciam é que a versão gratuita vem com o plano básico, enquanto a versão paga já vem com um dos planos pagos incluso, permitindo um maior número de usuários conectados simultaneamente. Irei explanar melhor sobre a diferença entre planos mais pra frente.Em seguida, será necessário efetuar um cadastro básico na Exit Games para ter acesso a sua dashboard e então gerenciar suas aplicações. Para tal, acesse o site da Exit Games, entre com seu e-mail e complete o cadastro. Após tê-lo efetuado será possível acessar sua dashboard e as informações de suas apps.
Por último, será necessário configurá-lo na Unity. Para acessar o wizard do PUN, acesse o menu Window>Photon Unity Networking e então clique em “setup”. Caso já tenha efetuado o cadastro, clique em “Setup” novamente e entre com seu AppId. Nesse wizard também é possível escolher uma região padrão ao qual seus jogadores irão se conectar. Para finalizar, clique em “Save” e pronto, o PUN está configurado e pronto para ser utilizado!
Antes que nos esqueçamos
Para evitar frustrações ao utilizar as funções do PUN e receber diversos erros ao executar o jogo, antes de começarmos devemos estender as classes que irão fazer uso das funções da Proton. Basta alterar isso:public class className : MonoBehaviour
Para isso:
public class className : Photon.MonoBehaviour
Feito isso na sua classe, poderemos usar as funções da Photon sem erros.
Começando…
Para fazer uso de todos os recursos que a Photon oferece, antes de mais nada, é preciso se conectar a um de seus servidores. Para isto, utilize o código a seguir:PhotonNetwork.ConnectUsingSettings("v1.0");Caso haja sucesso, seu jogo estará conectado ao servidor Photon. O ConnectUsingSettings utiliza as configurações salvas no PUN wizard, descrito anteriormente, e o único parâmetro a ser passado é a versão do jogo, que pode ser dado um nome qualquer, assim separando as diferentes versões do jogo, como por exemplo, separar uma versão de testes da versão oficial.
Há também outros métodos de se conectar a um servidor Photon, como a seguinte linha:
PhotonNetwork.ConnectToBestCloudServer("v1.0");Através do ConnectToBestCloudServer, seu jogo se conectará ao servidor da região com menor latência. O parâmetro a ser passado novamente é a versão do jogo.
OBS.: Conectando jogadores a diferentes regiões cria-se grupos de jogadores, ou seja, um jogador conectado a um servidor de uma região não conseguirá jogar com um outro conectado a outra região. Os servidores de cada região não se comunicam entre si.
Trabalhando com salas
Uma vez conectado ao servidor Photon, os jogadores irão querer ter acesso a uma lista de salas criadas no momento, para obter a lista de salas em execução utilize o seguinte código:PhotonNetwork.GetRoomList();E então para conectar o jogador a uma das salas, basta usar a seguinte função, passando o nome da sala como parâmetro:
PhotonNetwork.JoinRoom(roomName);Ou caso queira criar uma sala, utilize:
PhotonNetwork.CreateRoom(roomName);Ou ainda conectar o jogador a uma sala aleatória:
PhotonNetwork.JoinRandomRoom();O JoinRandomRoom irá percorrer a lista de salas até que uma esteja disponível.
Fazendo o multiplayer acontecer
Certo, agora que seus jogadores já podem criar e acessar as salas, está na hora de verem uns aos outros fazendo suas jogadas. Para que isso seja possível, é necessário adicionar o componente PhotonView, utilizado para transmitir dados entre os jogadores conectados a sala, aos GameObjects. Selecione seu GameObject e vá em Component/Miscellaneous/Photon View. O componente PhotonView possui as seguintes propriedades editáveis:- View ID: É o identificador único para este componente. Por padrão ele já atribui um ID, então, para evitar conflitos, é melhor deixar o valor padrão;
- Observe: Transform que poderá ser sincronizado;
- Observe option: O tipo de sincronização que será usado pelo componente. Atualmente existem 4 tipos de sincronização. O Off Observe não é sincronizado, o Reliable Delta Compressed sincroniza apenas quando há alterações. Já o Unreliable é sempre sincronizado, e por último, o modo Unreliable On Changem, que utiliza um pouco do modo anterior. Este envia uma última atualização a todos quando não há mais alterações, garantindo que todos a recebam;
- Serialization: É possível escolher quais propriedades do Observe serão sincronizadas. Somente posição, somente rotação, somente escala, posição e rotação ou todos.
OBS.: As atualizações não são suavizadas ou interpoladas, pois a sincronização é chamada de acordo com o sendRate, que por padrão é 15 vezes por segundo. É possível alterar a frequência de atualização, mas quanto maior, mais largura de banda será necessário, podendo causar problemas. Para alterar esse valor utilize PhotonNetwork.sendRate = X;.
No próximo artigo da série irei tratar sobre troca de mensagens entre os jogadores através de métodos RPCs (Remote Procedure Calls) e sobre Métodos CallBack que facilitam a administração do jogo.
Então, até a próxima!
Comentários