ZumbiPizza — Slice & Survive
Jogo co-op de pizza com zumbis feito em Unity, com multiplayer via FishNet.
ZumbiPizza é um jogo co-op para dois jogadores feito em Unity 6 (C#) em que os jogadores assam pizzas dentro de um motorhome, entregam nas casas de um bairro e enfrentam a horda de zumbis atraída pelo cheiro, com multiplayer autoritativo no servidor via LAN ou Steam P2P usando FishNet.
Unity 6 · C# · FishNet · Steamworks.NET · FishySteamworks · multiplayer co-op · primeira pessoa · URP · Cinemachine · vertical slice
O que é
Dois jogadores montam pizzas em um motorhome, entregam nas casas de um bairro e sobrevivem à horda de zumbis atraída pelo cheiro. O pitch das notas de design: Overcooked num motorhome de pizza, fugindo de zumbis que querem uma fatia, não cérebros. O projeto é um protótipo de vertical slice de um estúdio pessoal. Ele testa o loop de assar, entregar e jogar pizza nos zumbis, em multiplayer local (LAN) e pela Steam.
Funcionalidades
- Linha de produção de pizza como estações em rede: caixa de ingredientes (farinha) → batedeira (massa) → mesa de montagem (pizza crua) → forno (pizza assada, criada como um objeto de rede que dá para pegar). Cada estação só muda de estado no servidor.
- Entregas e pontuação: entregue pizzas nas casas dos clientes e ganhe pontos (
DeliveryManager,CustomerHouse,ScoreManager,ScoreHud). - Motorhome dirigível com banco do motorista (
MotorhomeController,DriverSeat). - Horda de zumbis: um spawner que acelera conforme o nível de cheiro do motorhome sobe, com pool limitado e IA de perseguição.
- Arremesso de pizza: jogue pizzas nos zumbis, com uma prévia de arco pontilhado que fica vermelha quando há colisão, e um efeito de câmera lenta quando um zumbi morde.
- Sistema de interação e de pegar objetos: interfaces
IInteractable/IGrabbable, um gerenciador de interação e dicas no mundo. - Cinco modos de jogo no menu principal: 2P local, host/entrar na LAN, host/entrar na Steam.
Stack técnica
| Tecnologia | Versão | Usado para |
|---|---|---|
| Unity | 6000.5.1f1 | Engine (ProjectSettings/ProjectVersion.txt) |
| FishNet | 4.7.2 (embutido) | Multiplayer autoritativo no servidor (Packages/com.firstgeargames.fishnet) |
| Steamworks.NET | embutido | Binding da API da Steam para o transporte P2P (Packages/manifest.json) |
| FishySteamworks | no repositório, Assets/_Game/Plugins/FishySteamworks |
Transporte do FishNet via Steam P2P (App ID 480, SpaceWar) |
| Unity Input System | 1.19.0 | Input do jogador |
| Universal Render Pipeline | 17.5.0 | Pipeline de renderização |
| Cinemachine | 3.1.7 | Câmera em primeira pessoa |
| MCP for Unity (Coplay) | cópia local em Packages/com.coplaydev.unity-mcp |
Automação do editor por um agente de programação com IA (veja MCP_SETUP.md) |
Como começar
Requisitos: Unity Hub com a 6000.5.1f1 instalada, e o cliente da Steam aberto para os modos Steam (App ID 480, SpaceWar).
Uma vez por máquina, depois de clonar:
powershell -ExecutionPolicy Bypass -File scripts/setup-git.ps1
Isso registra o Git LFS e o Unity SmartMerge (merge.unityyamlmerge) para reduzir conflitos de merge em arquivos .unity, .prefab e .asset.
Abra o projeto no Unity Hub, espere o Package Manager importar os pacotes embutidos em Packages/ e dê Play a partir de Assets/Scenes/MainMenu.unity (índice 0 no Build Settings).
Atalhos no menu do editor (de FISHNET_SETUP.md):
- Zumbipizza → Setup FishNet (prefab + spawn list) cria
NetworkPlayereDefaultPrefabObjects. - Zumbipizza → Setup MVP (Menu + Suburb) gera de novo as cenas com o bootstrap de rede.
Como usar
Modos do menu principal:
| Botão | O que faz |
|---|---|
| 2P LOCAL | Offline, carrega WedScene (roda como host em loopback para o gameplay em rede inicializar mesmo assim) |
| HOST LAN | Host + cliente local, na porta padrão do Tugboat |
| ENTRAR LAN | Cliente, digite o IP do host |
| HOST STEAM | Host P2P, mostra seu SteamID64 na tela |
| ENTRAR STEAM | Cliente, cole o SteamID64 do host |
Limitação da Valve: duas instâncias no mesmo PC não conseguem se conectar pela Steam. Use LAN para testar localmente. A Steam precisa de duas máquinas (ou duas contas em máquinas diferentes).
| Tecla | Ação |
|---|---|
| WASD | Andar / dirigir |
| Mouse | Olhar |
| E | Interagir / segurar |
| F | Pegar / soltar |
| Q | Jogar pizza |
Como funciona
NetworkSessionBootstrap (um objeto DontDestroyOnLoad criado em MainMenu) escolhe o transporte: Tugboat para LAN/offline ou FishySteamworks para Steam. Ele sempre troca de cena pelo SceneManager do FishNet, nunca pelo da Unity, para que os clientes remotos recebam a cena e o PlayerSpawner dispare (Assets/Scripts/Network/NetworkSessionBootstrap.cs).
O servidor é autoritativo. Montagem de pizza, arremesso (PizzaThrower, por um ServerRpc com validação de distância) e spawn de zumbis rodam só no host, e os NetworkObjects sincronizam com os clientes (Assets/Scripts/Throw/PizzaThrower.cs). Os jogadores mandam input por ServerRpcs.
GameManager guarda as referências do gameplay (motorhome, entregas, spawner de zumbis, HUD) configuradas no boot da cena (Assets/_Game/Scripts/Core/GameManager.cs). ZombieSpawner usa um timer simples que acelera conforme o nível de cheiro do motorhome sobe, com limite de pool. Um comentário no código marca ele como uma versão simplificada sem ondas programadas (Assets/Scripts/Zombies/ZombieSpawner.cs).
Estrutura do projeto
Assets/
Scenes/ MainMenu.unity, WedScene.unity
Scripts/
Interaction/ IInteractable, IGrabbable, InteractionManager, GrabManager
Network/ NetworkSessionBootstrap, GameplaySceneBootstrap, settings
Player/ FirstPersonController, Cinemachine first-person setup
Throw/ PizzaThrower, PizzaProjectile, ThrowPreview
UI/ MainMenuController, SlowMoController, FishNet debug menu
Zombies/ ZombieSpawner, ZombiePool, ZombieChaseAI
_Game/
Scripts/ Core, Pizza, Motorhome, World (deliveries), UI, Editor tools
Plugins/ FishySteamworks transport
Packages/ Embedded FishNet, Steamworks.NET, MCP for Unity
scripts/setup-git.ps1 Git LFS + Unity SmartMerge setup
vault/ Obsidian vault: game design document (Portuguese) and tasks
FISHNET_SETUP.md Multiplayer setup notes (Portuguese)
MCP_SETUP.md MCP for Unity setup notes (Portuguese)
Status
Funcionando: menu principal com os 5 modos (2P local, host/entrar na LAN, host/entrar na Steam), o loop assar → entregar → pontuar, zumbis aparecendo em resposta ao cheiro e arremesso de pizza nos zumbis.
Simplificado de propósito (marcado com ponytail: no código): ZombieSpawner é um timer + pool sem ondas programadas nem dificuldade progressiva. PizzaThrower não tem cone de mira assistida nem sistema de slots de inventário.
Ainda não feito (listado como próximos passos em FISHNET_SETUP.md): lobby nativo da Steam com convite de amigos, sincronização visível do motorhome e dos zumbis no cliente, e testes com “parrel sync” em dois editores.
Documentos de design
O game design document completo (em português) fica no vault do Obsidian em vault/zumbipizza/GDD/. Ele cobre visão geral, loop de jogo, mecânicas, papéis no co-op, mundo, sistemas (montagem de pizza, entregas, horda, eventos aleatórios, economia), UI, arte, áudio, escopo do MVP, roadmap e riscos.
Licença
Todos os direitos reservados.
Outros projetos paralelos

Flood
Battle royale de Roblox em que a água sobe e vence quem constrói a estrutura que aguenta mais tempo.

Zumbi Harvest
Jogo de Roblox em Luau com ciclo de dias, economia, upgrades e IA de zumbis.

Baixar legendas do YouTube
Script com interface pra baixar as legendas de um canal inteiro de uma vez.
