
Missão queijo e garras
A downloadable game
1 Introdução
Com o avanço da tecnologia, o mundo se tornou cada vez mais conectado à internet, logo os jogos também se adaptaram a isso, com diversos lançamentos onde você pode jogar com outros jogadores de vários lugares apenas conectado na rede de sua casa. Pensando nisso, este projeto tem como objetivo criar um protótipo de um jogo digital multijogador assimétrico, no estilo party game , inspirado na clássica brincadeira de esconderijo, mas com um toque novo: uma disputa entre gato e rato.
O jogo usa um sistema de conexão de redes via cliente-servidor, essa escolha técnica ajuda a simplificar a implementação de partidas online sem que seja necessário a criação de servidores dedicados e vasto conhecimento em infraestrutura de redes.
O objetivo principal é desenvolver esse protótipo online que funcione bem e mantenha a essência da brincadeira de se esconder e procurar.
O projeto está sendo desenvolvido em quatro etapas: pesquisa , planejamento , desenvolvimento e avaliação . A pesquisa ajuda a entender o público e os desafios técnicos; o planejamento organiza as tarefas usando ferramentas como Trello e GitHub; o desenvolvimento coloca a mão na massa com a criação e programação do jogo; e por fim, a avaliação será feita com testes reais com jogadores — primeiro na faculdade, depois com o público geral, através de uma versão publicada no Itch.io
2 Desenvolvimento
Para suportar partidas com até 5 jogadores em tempo real, o projeto adota uma arquitetura cliente-servidor , onde um servidor central controla o estado do jogo e sincroniza as ações entre os jogadores, conforme explicado por Gregory.
Inicialmente, foi testado o framework Mirror , baseado no antigo UNet, ideal para jogos locais. Porém, como o foco é multiplayer online, optou-se pelo Unity Netcode for GameObjects , ferramenta oficial da Unity.
A troca se deu por fatores como: integração direta com o motor, suporte ativo, facilidade na resolução de problemas e compatibilidade com Unity Relay e Lobby . Essa escolha permite uma estrutura de rede estável, simples e eficiente para o jogo.
2.1 Mecânicas
Sistema de jogadores
O jogo é baseado em dois papéis principais: o gato , que é o procurador, e os ratos , que são os fugitivos. Ambos compartilham algumas mecânicas na programação, mas com diferenças em certos valores, como velocidade e habilidades.
Cada jogador controla um personagem com movimento e câmera própria. Os comandos são processados localmente e sincronizados com o servidor por meio do Netcode for GameObjects , garantindo que todos vejam as ações em tempo real.
Todos os personagens têm barras de vida individuais, exceto o gato, que não tem vida própria, mas pode reduzir a dos ratos. Sempre que ocorre uma interação, os dados são enviados ao servidor, que repassam as informações para muitos jogadores.
As colisões entre personagens e objetos são bloqueadas por colisores , que são processadas pelo servidor e enviadas para os clientes. Isso garante que eventos como capturas e interações com o cenário sejam consistentes e sincronizados.
Figura 1: Código de movimentação do jogador
Fonte: Autoria própria
Essa outra imagem demonstração a continuação desse código.
Figura 2: Código de movimentação do jogador (Parte 2)
Fonte: Autoria própria
- Sistema de esconderijo : Com o objetivo de oferecer um ponto estratégico aos ratos, os jogadores podem interagir com objetos posicionados de forma manual para se esconder do gato, ajudando com a fuga.
- Coleta de item : O objeto de coleta representado por um queijo foi determinado como um item que deve ser obtido pelos ratos ao longo da partida, é essencial para determinar a vitória deles, sendo assim sua mecânica foi pensada e projetada para estimular com que os jogadores permaneçam constantemente se movimentando tendo como seu objetivo primário e logo em seguida a fuga.
2.2 Personagens
Gato é o caçador ou procurador do nosso projeto, o objetivo dele é pegar todos os ratos antes dele completarem o objetivo ou até caçar eles até o tempo acabar
Figura 3: Gato
Fonte: Autoria própria
E o rato precisa fugir, se esconder e coletar os queijos para ganhar poder junto com outros jogadores.
Figura 4: Rato
Fonte: Autoria própria
Ainda estamos fazendo uma modelagem do cenário do jogo, junto com os objetos que podem ser usados pelos ratos para poder se esconder.
Uma demonstração da animação dos personagens:
2.3 Programação
Esse tópico vai ser para mostrar as funções usadas no processo de criação do jogo, os scripts estão linkados para download no final do site.
1. CamCollider.cs
- Função: Controlar os limites da câmera para que não saia dos limites do cenário.
- Pontos-chave:
- Utilize o componente CinemachineConfiner3D para definir os limites da câmera
- No método Start(), encontra um objeto com a tag "Collider3d" e define como volume de confinamento
- Garante que a câmera não ultrapasse os limites físicos do jogo
- Papel no jogo: Mantenha a câmera dentro dos limites do cenário, evitando que os jogadores vejam áreas fora do mapa.
2. GameManager.cs
- Função: Gerenciar a lógica principal do jogo, incluindo conexão em rede e spawn de jogadores.
- Pontos-chave:
- Controle o NetworkManager para conexões multijogador
- Gera jogadores em horários diferentes (A e B) com pré-fabricados específicos
- Gerenciar eventos de conexão e desconexão de jogadores
- Usa GameSettings para determinar se é host ou cliente
- Coordena a inicialização do jogo baseado no lobby
- Papel no jogo: É o núcleo da lógica multiplayer, garantindo que os jogadores sejam instanciados corretamente e que a conexão entre clientes funcione perfeitamente.
Figura 5: Código do gerenciador de jogo

Fonte: Autoria própria
3. GatosMec.cs
- Função: Implementa a mecânica dos gatos no jogo (caçadores).
- Pontos-chave:
- Permite que gatos verifiquem móveis em busca de ratos escondidos
- Implementa sistema de resfriamento por cômodo (quarto, sala, banheiro, jardim)
- Use raycasting para detectar em qual cômodo o gato está
- Mostra UI com informações sobre verificações disponíveis
- Expulsa ratos encontrados com força física
- Papel no jogo: Defina o comportamento dos jogadores do time dos gatos, incluindo suas habilidades principais de caça e limitações estratégicas (cooldowns).
4. MóveisOcultáveis.cs
- Função: Definir o comportamento dos móveis onde os ratos podem se esconder.
- Pontos-chave:
- Mantém estado de ocupação sincronizado em rede (NetworkVariable)
- fornecer métodos RPC para ocupar/liberar móveis
- Definir posições de esconderijo e saída
- Mostra gizmos visuais no editor para facilitar o design de nível
- Papel no jogo: Cria os pontos de interação principais para os ratos, permitindo que se escondam e sejam descobertos pelos gatos.
5. Carregando ProgressManager.cs
- Função: Gerenciar o progresso de carregamento de cenas em sessões multiplayer.
- Pontos-chave:
- Rastreie o progresso de carregamento de todos os clientes
- Use NetworkedLoadingProgressTracker para sincronizar o progresso
- Atualiza UI quando rastreadores são aumentados/removidos
- Gerenciar eventos de conexão/desconexão
- Papel no jogo: Garante que todos os jogadores tenham carregado a cena antes do jogo começar, importante para experiências multiplayer sincronizadas.
6. GUI de rede.cs
- Função: Fornecer uma interface simples para iniciar sessões multiplayer.
- Pontos-chave:
- Botões para iniciar como host, cliente ou servidor
- Mostrar status atual da conexão
- Interface básica sem dependências de UI complexa
- Papel no jogo: permite testes rápidos de funcionalidade de rede durante o desenvolvimento.
7. NetworkedLoadingProgressTracker.cs
- Função: Armazenar o progresso de carregamento de um cliente específico.
- Pontos-chave:
- NetworkVariable para sincronizar o progresso entre clientes
- Persistir entre cenas (DontDestroyOnLoad)
- Leitura pública, mas escrita restrita ao dono
- Papel no jogo: Componente auxiliar para o LoadProgressManager, armazenando o estado individual de cada jogador.
8. NetworkHUD.cs
- Função: Interface mais completa para gerenciamento de conexões multiplayer.
- Pontos-chave:
- Campos para inserir IP e porta
- Botões para host, cliente e shutdown
- Feedback visual do status da conexão
- Gerenciar transição entre menus
- Validar entradas de endereço
- Papel no jogo: Substitui o NetworkGUI básico, fornece uma interface mais robusta para os jogadores configurarem suas conexões.
9. MovimentoDoJogador.cs
- Função: Controla o movimento dos personagens (tanto gatos quanto ratos).
- Pontos-chave:
- Movimento baseado em física (Rigidbody)
- Controle de velocidade e rotação
- Sincronização de movimento em rede via RPCs
- Gerenciar visibilidade de teto com base no cômodo atual
- Configuração específica para dono/não-dono do objeto
- Papel no jogo: fornece uma base de movimento para todos os personagens, com sincronização multiplayer e gerenciamento de visibilidade do cenário.
10. QueijoBehavior.cs
- Função: Implementa a mecânica de coleta de queijos pelos ratos.
- Pontos-chave:
- Rastreia ratos que estão próximos ao queijo
- Tempo necessário para coleta (2 segundos)
- Notificar QueijoSpawnManager quando coletado
- Aumentar a pontuação do rato
- Só foi executado no servidor (autoritativo)
- Papel no jogo: Definir o objetivo principal dos ratos (coletar queijos) e como a pontuação é adquirida.
11. QueijoSpawnManager.cs
- Função: Gerenciar o spawn e o desaparecimento dos queijos que os ratos devem comer.
- Pontos-chave:
- Spawn controlado: Cria queijos periodicamente mantendo um número máximo ativo
- Validação de posição: Verifique se o local de spawn é válido (tag correta, não dentro de móveis, distância de outros queijos)
- Sincronização em rede: Usa NetworkObject para gerar/despawnar queijos em todos os clientes
- Tempo de vida: Queijos são removidos automaticamente após um tempo
- Gerenciamento de lista: Acompanhe todos os queijos ativos
- Feedback visual: Mostra área de spawn e posições no editor
- Papel no jogo: Definir os objetivos que os ratos devem ser coletados; garantir que os queijos sejam aplicados em locais jogáveis; mantém o equilíbrio do jogo controlando a quantidade disponível; sincroniza o estado dos queijos entre todos os jogadores.
12. RatosMec.cs
- Função: Implementar a mecânica principal dos ratos (esconder-se e coletar queijos).
- Pontos-chave:
- Esconderijo: Permite que ratos se escondam em móveis (HideableFurniture)
- Física: Gerencia estados físicos (cinemático/não-cinemático) durante esconderijo
- Pontuação: Sistema de pontuação quando coletam queijos
- Sincronização em rede: Usa NetworkTransform para posição e NetworkBehaviour para RPCs
- Entrada: Configurar controles para interagir com móveis
- Estado: Mantém track se está escondido ou não e em qualquer mobilidade
- Papel no jogo: Definir o comportamento principal dos jogadores do tempo dos ratos
Implementa o sistema de esconderijo que é o coração da mecânica; gerencia a interação com os queijos (coleta/pontuação); mantém privacidade de estado entre clientes; fornece feedback visual para o jogador.
Figura 6: Código de mecânica de se esconder
Fonte: Autoria própria
Na conclusão do tópico é recomendada a visualização dos códigos pelo correspondente para melhor compreensão.
3 Conclusão
Este projeto teve como objetivo adaptar a brincadeira do esconde-esconde para o meio digital, resultando em um protótipo funcional de jogo multijogador assimétrico. Com base nos testes e nas funcionalidades implementadas, é possível afirmar que os objetivos propostos foram alcançados, incluindo a criação de mecânicas sólidas, a estrutura de rede estável e uma experiência interativa envolvente.
Durante a produção dele surgiram pontos positivos como a boa sincronização entre jogadores, papéis bem definidos e uso eficiente da arquitetura cliente-servidor. Entre os aspectos a melhorar, destacam-se a interface, a diversidade de cenários e o balanceamento das mecânicas.
A experiência proporcionou aprendizado prático em game design e desenvolvimento multiplayer. Para etapas futuras, recomenda-se ampliar os testes, aprimorar os elementos visuais e preparar o jogo para publicação.
Referências
BARROS, D. O. Exploração do balanceamento de jogadores em jogos multijogador. 2024. Dissertação (Mestrado em Engenharia Informática) – Universidade de Lisboa, Lisboa.
BILLWAGNER. Visão geral - A tour of C#. Disponível em: https://learn.microsoft.com/pt-br/dotnet/csharp/tour-of-csharp/overview
BRAGA, M.; SILVA, R.; LIMAS, J. Comparativo de ferramentas de emulação e simulação no ensino de redes de computadores. Anais do Computer on the Beach, v. 15, p. 333-335, 2024. DOI: 10.14210/cotb.v15.p333-335.
FERRAMENTAS de desenvolvedor e essentials gratuitos. Disponível em: https://visualstudio.microsoft.com/pt-br/dev-essentials/.
GREGORY, J. Game engine architecture. 3. ed. Boca Raton: CRC Press, 2018. p. 25, 168.
MARQUES, F. P. R.; MIRANDA, L. C. de. Design de jogo e experiência de fluxo: reflexão e desafios na perspectiva da teoria do fluxo. Anais Estendidos do XXI Simpósio Brasileiro de Jogos e Entretenimento Digital (SBGames Estendido 2022). Porto Alegre: Sociedade Brasileira de Computação, 2022.
NORDBY, A. et al. System thinking in gamification. SN Computer Science, v. 5, n. 3, 2024.
REIS, D. Exploring asymmetry of information in cooperative games. 2022. Dissertação (Mestrado) – Universidade de Lisboa, Lisboa.
UNITY. Unity NetCode - Unity - Manual. 2020. Disponível em: https://docs.unity3d.com/2020.1/Documentation/Manual/com.unity.netcode.html.
UNITY. Multiplayer development status and next milestones - September 2024. Unity Discussions, set. 2024. Disponível em: https://discussions.unity.com/t/multiplayerdevelopment-status-and-next-milestonesseptember-2024/1521688.
----
Ficha completa da equipe:
César Souza Santandrea - Programador - https://cesarssant.itch.io
Júlia de Paula Mazzitelli - Sonorização - https://juliamazzitelli.itch.io
Lívia Silva Pereira - Artista - https://cerliv.itch.io/
Mateus dos Santos Heinz - Designer de níveis - https://deatch.itch.io
...
Universidade do Vale do Itajaí - UNIVALI
Marcelo Dornbusch Lopes - Orientador - m4rc3lo
César Albenes Zeferino | Diretor Escola Politécnica
Giorgio Gilwan | Coordenador do Curso de Design de Jogos
Rafael Kojiio | Coordenador Gamelab UNIVALI
----
Projeto desenvolvido como requisito parcial para obtenção de aprovação na disciplina: (i) Programação Aplicada Avançada - Professor - Marcelo Dornbusch Lopes ;
O conteúdo aqui tem direito reservado e pode conter inconsistências conceituais.
Updated | 23 days ago |
Status | In development |
Author | JuliaMazzitelli |
Leave a comment
Log in with itch.io to leave a comment.