Executando verificação de segurança...
18

Pitch: Utilização da WebRTC na construção de uma arquitetura peer-to-peer para jogos online na Unity 3D

Olá a todos!

Hoje vou comentar um pouquinho da minha trajetória no desenvolvimento do meu TCC para o curso de Engenharia de Computação. Estou na apresentação e defesa da ideia no momento. Entre setembro e outubro o desenvolvimento irá começar a todo vapor!

O projeto possui o seguinte título: "Utilização da WebRTC na construção de uma arquitetura peer-to-peer para jogos online na Unity 3D".

Motivação

A maioria das arquiteturas de rede que são utilizadas em jogos multiplayer online são cliente-servidor. Unindo isso ao meu gosto por jogos, o presente projeto trata de construir uma alternativa ligada a implementação da arquitetura peer-to-peer para:

  • Estudas da viabilidade de implementação;
  • Caráter comparativo entre arquiteturas;

Objetivo geral

Propor um framework open source para multiplayer online de jogos na Unity usando WebRTC.

Objetivos específicos

  • Construir o mesmo jogo multiplayer online em duas arquiteturas diferentes, usando Photon Unity Networking (cliente-servidor) e usando WebRTC (peer-to-peer);
  • Elaborar um framework open source usando o WebRTC para ter acesso a arquitetura peer-to-peer;
  • Realizar comparações através de métricas entre as duas arquiteturas de rede.

Por que WebRTC?

É uma tecnologia open source e gratuita promovida pela Google para comunicação P2P de forma nativa através de APIs do Javascript para comunicação de áudio, vídeo e dados em geral. Além disso, meu framework será para jogos exportados para WebGL na Unity, portanto conseguirei comunicar isso usando o próprio navegador.

Experimentação

Comunicação entre C# e Javascript na Unity

No processo de experimentação comecei exatamente com esse tópico. É algo que no começo eu não sabia que era possível e após olhar a documentação da própria engine vi que é possível realizar uma comunicação bi-direcional, da Unity pro navegador e do navegador para a Unity. Nesse meu processo inicial fiz apenas uma comunicação da Unity com o navegador, ou seja, chamei uma função Javascript no C#.
Para criar tal comunicação é necessário criar um arquivo ".jslib" que seria uma biblioteca de funções e variáveis. Essa biblioteca deve estar na pasta Plugins (dentro de Assets do seu projeto).
Exemplo de uma função de diálogo de mensagem padrão
Após isso é criado um código em C# para justamente chamar essa função DialogMessage para exibir um texto vindo da Unity diretamente numa caixa de diálogo de mensagem no navegador.
Codigo em C# relacionando com função Javascript
O código é simples, basta chamar uma dependência nativa da linguagem para comunicar com códigos externos e depois usar um modificador chamado 'extern' para isso. Esse script é vinculado a um GameObject qualquer na Unity e quando executado o jogo o código é rodado apenas uma vez, pois a função está sendo chamada no método Start. O resultado fica assim (após exportação para WebGL):
Diálogo de mensagem com texto diretamente do C#

Testes com WebRTC na Unity

Agora vamos para o tema principal do meu trabalho que é justamente aplicar essa tecnologia comum a aplicações de vídeo/áudio chamadas nos navegadores, como em aplicações Google Meet por exemplo, na Unity.
O exemplo simples inicial que eu apliquei foi apenas conectar a um 'Peer ID' e enviar um valor flutuante de 0 a 10 através de um deslizador, é possível ver na figura abaixo:
Exemplo de aplicação na Unity
Essas informações foram enviadas diretamente para um outro local, uma página HTML simulando um cliente de outro local:
Recebendo as informações da Unity através do WebRTC
Para criação desse exemplo eu usei a biblioteca PeerJS para facilitar a escrita e abstrair alguns itens da WebRTC. A minha ideia é tornar isso mais simples ainda a implementação de jogos multiplayer online na Unity usando a arquitetura de rede peer-to-peer, pois é algo que tem muitos benefícios, um deles é escalabilidade e baixo custo de hospedagem.

Agradecimentos

Obrigado a todos pela atenção e também pelo espaço de postar aqui. Espero que gostem (e que dê tudo certo no processo de implementação futura). Isso foi apenas um resumão de todo processo da construção dos exemplos e também sobre a tecnologia WebRTC.

Link do repositório que em breve terá tudo melhor detalhado e o progresso da implementação

Carregando publicação patrocinada...
3

Ótimo conteúdo, como forma de complementar e também te ajudar no seu projeto, recomendo este link aqui.

Lembro de já ter ouvido falar sobre os problemas de segurança relacionados ao WebRTC, o omegle por exemplo utiliza essa tecnologia e é possível você saber a localização da outra pessoa através do IP que você consegue somente utilizando o console do navegador. Não sei se já resolveram esse problema mas lembro de acontecer e acho que faz sentido você ter no radar esse problema. Sucesso para o seu projeto!

1

Opa, muitíssimo obrigado pelo comentário e pela contribuição!

Passei os olhos no artigo e achei bem interessante, logo vou ler com mais calma. Será de grande valia!

Realmente uma das coisas que minha banca comentou na primeira etapa da avaliação foi justamente os pontos de segurança, precisarei ver isso!