Alguma parte do fórum ou do curso voltada a Networking, como o Fish-Net: Networking Evolved?

Olá pessoal, boa tarde!

Não cheguei a me apresentar aqui antes, mas tenho pouco tempo e resolvi passar por aqui pra tentar tirar essa dúvida e me conectar com vocês por aqui.

Sou arquiteto de microsserviços, atuante como especialista java e tech lead, trabalhando pro governo, como a maioria aqui, apaixonado por jogos. Estou estudando desenvolvimento de jogos a cerca de 2 anos, já estudei um pouco de Godot e um tanto de Unreal, mas acabei vindo pra Unity por alguns motivos técnicos mesmo.

Hoje me vejo um pouco mais apto na unity, mas muitos conceitos ainda me faltavam então decidi pegar um curso pra sair um pouco da documentação oficial e de apenas ficar em vídeos aleatórios no youtube, também poder me conectar e entender mais a experiência de outras pessoas, inclusive a experiência de voltar a usar fórum me atrai muito, kkkkk.

Basicamente eu tenho um projeto que virou um jogo por conta de uma história futurista de RPG de mesa que tinha desenvolvido a muitos anos, hoje o projeto se encontra como um protótipo, mas com bases bem sólidas, tenho um projeto Unity com Fish-Net: Networking Evolved versão pro, com um projeto C# bem estruturado e uma boa arquitetura.

Minha questão é saber se tem algum local do fórum, ou discord, ou até mesmo etapas do curso, que falam mais sobre arquitetura de código ou networking, meu projeto está começando a ficar mais “parrudo” na questão de código, com uma arquitetura um tanto mais complexa, então sentia necessidade de discutir sobre e ver como são as soluções da comunidade pra alguns problemas de organização e arquitetura.

No modelo enterprise, arquiteturas robustas são extremamente bem vistas, auxiliam com a interpretação e implementação segura de regras de negócio e auxiliam bem no desenvolvimento por outros desenvolvedores que acabam tendo mais facilidade de separar a responsabilidade do código e dar manutenção, mas parece que as estruturas de jogos, ou pelo menos na unity, ainda não tem uma padronização muito bem definida quando o código cresce um pouco mais.

Se alguém está atuando com alguma tecnologia parecida com a que estou usando tiver experiências pra tratar sobre, ou existir algum local específico por aqui pra debater, ficaria feliz em discutir e aprender mais.

Quando o projeto começa a crescer, a parte de código vira, sem dúvida, o ponto que mais exige atenção. Se a estrutura não estiver bem pensada, vira uma bola de neve rapidinho.

Vi que comentou sobre Fishnet haha. Eu comecei a mexer com multiplayer usando a biblioteca Mirror, mas logo senti falta de alguns recursos importantes, como Client Side Prediction e Lag Compensation. Por conta disso, resolvi dar uma chance ao FishNet, na época estava relativamente no início — e cara, que surpresa boa! Além de já trazer essas implementações mais avançadas de forma nativa, a arquitetura da biblioteca é bem pensada e até mais simplificada do que eu imaginava. Facilitou bastante meu fluxo de trabalho, já criei alguns projetos com ele, e com certeza é a melhor biblioteca de rede para Unity até o momento.

Também venho dessa linha de manter o projeto limpo, separando bem responsabilidades, tentando deixar o código o mais sustentável possível. E sinto exatamente essa dor que você comentou: quando o projeto começa a ficar mais robusto, é difícil encontrar conteúdo que fale sobre boas práticas de arquitetura em jogos com mais profundidade.

A Unity até tem alguns materiais sobre o assunto, por exemplo esse ebook sobre padrões de projeto e arquitetura, não é um conteúdo muito aprofundado, mas é uma leitura legal:

Aliás, sempre que quiser, fique à vontade pra compartilhar o que você for descobrindo ou aplicando no seu projeto aqui no fórum — vai ser ótimo fomentar esse tipo de discussão. Inclusive, pretendo postar mais por aqui também.

Poxa, SOLID pra C# com unity, com organização de projeto, coisa linda ein?

Então, a medida que meu projeto começou a crescer, ficou bem complexo, pra piorar tudo, tenho uma API de controle que tenho endpoints e processos em Java com Spring, que controla alguns fluxos do jogo e realiza algumas consultas com nível de segurança interno, rodando com docker, no meu cluster privado onde rodo a build de desenvolvimento do servidor, a integração desses projetos que deixou tudo mais confuso ainda.

Basicamente tive que integrar a serialização com DTOs entre os projetos e separar corretamente as camadas executadas entre as services, cheguei numa estrutura que serviu pra mim, mas deixou bem complicado, kkkkk.

image

Desde o início do projeto, aplicando basicamente conhecimentos que trouxe do desenvolvimento web, algumas coisas se tornam complexas demais pra um jogo.

Caramba, sua estrutura tá parecendo muito boa, bem robusta mesmo! Dá pra ver que você aplicou bastante coisa do mundo web no projeto.

Mas uma coisa legal de lembrar é que, às vezes, uma abordagem mais simples também funciona bem — principalmente se ela ajuda a reduzir a complexidade e deixar o desenvolvimento mais leve no dia a dia. No fim, o que importa é encontrar o equilíbrio entre organização e praticidade, né?

Tá ficando show!

1 curtida

Sim, isso mesmo! Tô tentando encontrar um equilíbrio, determinei como padrão pro projeto que, sempre que tiver uma separação de responsabilidade que necessite de controladores separados pra sincronização com o servidor, eu tendo separar, de resto, quando não é algo que tem conexão direta com o servidor, eu faço uma separação de responsabilidade menos burocrática, por que o problema mesmo é quando tem muita conexão com servidor ou múltiplas chamadas de RPC ou chamadas pro backend pra atualização de informações do lado do banco de dados (que tô fazendo assincronamente pro backend).

Tá ficando legal, mas ainda enfrento muitos problemas, mas atualmente o maior gargalo é fazer os modelos 3d, chego a demorar 2 semanas pra concluir um, minha habilidade aí é bem limitada, hehehe. Mesmo em lowpoly e usando IA pra fazer as texturas.