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