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

Pitch: Proton - um framework open source para construção de jogos online usando WebRTC na Unity

Olá a todos!

Hoje irei apresentar mais do meu projeto de TCC que segue em desenvolvimento. Há um tempo atrás eu postei sobre toda ideia, sobre a experimentação, motivação e objetivos - Utilização da WebRTC na construção de uma arquitetura peer-to-peer para jogos online na Unity 3D.

Exemplo com 2 jogadores

Exemplo com 2 jogadores

A ideia é tornar (e preciso aprender melhor sobre) o projeto open source, como já estou fazendo. Eu quero muito contribuir com valor concreto a essa comunidade, trazendo um tópico muito interessante que é uma proposta diferente de conexão do convencional dos jogos multiplayer (cliente-servidor).

A única coisa de servidor que o projeto consta é um de sinalização que é usado somente para encontrar os peers na rede. Toda transferência de dados é feita entre os peers da rede - sem uso de servidor. Que inclusive não coloquei nesse repositório, estou melhorando/desenvolvendo ele e pretendo colocar publicamente para todos. Portanto, podemos dizer que o projeto trata-se de uma arquitetura híbrida.

Estou tendo alguns problemas de sincronização, pois tive uma ideia para não ficar enviando dados repetidos entre a rede para não sobrecarregar (exemplo: se o objeto não alterou sua escala não tem porque ficar enviando X,Y,Z a todo momento sem alteração) mas que não funcionou de forma tão satisfatória.

Como funciona de modo geral?

Há um template personalizado de build de WebGL que eu criei que dentro do arquivo "index.html" eu chamo um script do PeerJS (lib auxiliar que estou usando para abstrair as funções do WebRTC e tornar mais simples o desenvolvimento). Depois disso eu crio um arquivo ".jslib" para conversar Javascript com C# na Unity e através disso consigo manipular as funções do PeerJS - envio de dados pelo data channel, conexão entre peers e entre outros.

Link do repositório: Proton

Observação: depois de eu pensar o nome notei que ficou muito parecido com o Photon que é um framework cliente-servidor de multiplayer na Unity, mas realmente não era a intenção! 😁

Roadmap

  • Melhorar servidor de sinalização
  • Comparativo entre o mesmo jogo feito usando duas tecnologias: cliente-servidor e P2P
  • Gerar link de teste público de um jogo feito usando esse framework
  • Criar uma documentação bem explicativa e simples para utilização
Carregando publicação patrocinada...
2

Ótimo post. Um dúvida, procurei no google sobre WebRTC, mas nao consegui entender oq de fato realmente é. Tipo, é um API, mas de que exatamente? video, voip, blockchain? Ela usa o WebGL por baixo?

2

Opa, muito obrigado!

WebRTC é uma API nativa do Javascript que traz para os navegadores uma comunicação de vídeo, áudio e transferência de dados sem a necessidade de instalar um plugin ou extensão para cada cliente. Além disso, ela traz como arquitetura de rede principal a peer-to-peer (P2P).

No caso de WebGL seria uma API também, mas ela é para renderização de gráficos 2D ou 3D numa página web, muito utilizado para desenvolvimentos de jogos e também de aplicações mais sofisticadas, exemplo: um editor de imagens como o Photoshop ou até uma aplicação estilo Figma.

Ah, WebRTC não usa WebGL por baixo. Nesse exemplo que mostrei eu uso a game engine Unity e na hora de fazer o build eu seleciona a opção de WebGL para portar esse jogo para um código nativo Javascript para rodar os gráficos direto do navegador sem a necessidade de plugins extras.

2
1

Muito obrigado! Pretendo inclusive criar uma boa documentação e alguns exemplos práticos mais elaborados.

Acredito que até um vídeo explicando melhor a ideia seja interessante!