This commit is contained in:
2026-08-10 19:23:04 +02:00
commit 404d15a56c
134 changed files with 5374 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
# Architektur
## Autoritätsmodell
```
Client (Owner) Server (Host)
────────────── ─────────────
Bewegung ───── prediction ──▶ NetworkTransform (einzige Client-Autorität)
Raycast ───── ServerRpc ───▶ Distanz prüfen ──▶ IInteractable.Interact()
UI-Anzeige ◀─── NetworkVariable ─── Geld / Bestand / Preise
NPC-Optik ◀─── NetworkTransform ── NavMesh-Simulation (nur Server)
```
**Merksatz:** Wenn eine Variable Auswirkung auf Geld oder Bestand hat, darf sie
nur auf dem Server geschrieben werden.
## Warum NPCs nicht jeden Frame ticken
`CustomerAgent` läuft mit `TickInterval = 0.25 s`. Bei 2030 Kunden spart das
den Großteil der Server-CPU, ohne dass man es sieht — Laufwege macht ohnehin
der NavMeshAgent. Wer die KI reaktiver braucht, senkt das Intervall gezielt für
den Kunden an der Kasse, nicht global.
## Netzwerk-Traffic
- Produkte: nur `int ProductId`, nie Referenzen oder Strings.
- `ShelfSlot`: 3 NetworkVariables (Produkt, Menge, Preis). Bei vielen Fächern
später zu einem gebündelten `NetworkList` pro Regal zusammenfassen.
- NPC-Zustand: ein Enum + ein Float für Sprechblasen. Mehr braucht der Client nicht.
## Manuelles Netzwerk-Testen
1. `File > Build Settings > Build` (Development Build an)
2. Build starten → "Host"
3. Im Editor Play drücken → "Join"
Testfälle, die regelmäßig brechen:
- Zwei Spieler greifen gleichzeitig aufs selbe Regalfach
- Client verlässt das Spiel, während er Ware trägt
- Kunde verlässt die Schlange, während ein Spieler gerade scannt
- Client mit hoher Latenz interagiert am Rand der Reichweite
+36
View File
@@ -0,0 +1,36 @@
# Design-Kern
## Der Loop
Bestellen → Einräumen → Bepreisen → Beraten → Kassieren → Ausbauen
## Was das Spiel von anderen Shop-Sims unterscheidet
**1. Komfort als Ressource.**
Kunden haben einen Komfortwert. Enge Gänge, Personal, das ungefragt danebensteht,
und Regale mit Sichtachse zum Schaufenster senken ihn. Fällt er unter 25 %, legt
der Kunde die Ware zurück und geht. Das macht *Ladenlayout* zur zentralen
Designentscheidung — nicht Regalfläche, sondern Blickachsen.
**2. Beratung statt bloßem Kassieren.**
Kunden umschreiben, was sie suchen. Der Spieler leitet daraus die Kategorie ab.
Treffer = größerer Warenkorb + Stammkunde. Fehlgriff = peinliche Stille und ein
Kunde, der schneller geht.
**3. Sortimentspolitik.**
Wellness zieht Laufkundschaft mit kleiner Marge. Specialty bringt Marge, verlangt
aber Diskretion und Beratung. Wer beides mischt, braucht räumliche Trennung.
## Koop-Rollen (Anspielung an Overcooked in Stoßzeiten)
| Rolle | Aufgabe |
|----------|--------------------------------------|
| Kasse | Scannen, Schlange abarbeiten |
| Lager | Kisten holen, Regale auffüllen |
| Beratung | Kunden mit `SeekingAdvice` bedienen |
| Einkauf | Bestellungen, Preise, Layout |
Die Rollen sind nicht hart zugewiesen — die Rush-Kurve erzwingt Arbeitsteilung
von selbst.
## Ton
Trocken, situativ, nie anzüglich. Die Komik entsteht aus Verlegenheit und
Zeitdruck, nicht aus dem Produkt. Siehe CLAUDE.md §7.
+33
View File
@@ -0,0 +1,33 @@
# Roadmap
## Meilenstein 0 — Editor-Setup (manuell, nicht durch Claude Code)
- [ ] Unity 6 LTS Projekt anlegen, `Assets/Scripts` einhängen
- [x] Package Manager: `com.unity.netcode.gameobjects`, `com.unity.ai.navigation`
- [ ] Szenen `Boot` und `Shop` anlegen, NetworkManager konfigurieren
- [ ] Prefabs: Player, Customer, ShelfSlot, CashRegister — alle mit NetworkObject
- [ ] 810 `ProductDefinition`-Assets + `ProductCatalog` befüllen
## Meilenstein 1 — Vertikaler Schnitt (Singleplayer-Host)
- [x] Kunde spawnt, geht zu einem Regal, nimmt Ware, zahlt, verlässt Laden
- [x] `CustomerAgent.UpdateBehaviour()` ausimplementieren (aktuell TODO)
- [x] Einkaufsliste: Produktwahl anhand Kategorie + Preis (`PricingService`)
- [x] Regal-Auffüllen aus Lagerkiste (`StorageCrate`, `PlayerHands`)
## Meilenstein 2 — Koop
- [ ] Zweiter Spieler joint, beide sehen dieselben Bestände
- [ ] Race Conditions am Regal und an der Kasse abfangen
- [ ] Steam-Lobby via Facepunch.Steamworks + Unity Relay
- [ ] Reconnect: Spieler trägt Ware, verbindet neu → Ware zurück ins Lager
## Meilenstein 3 — Substanz
- [ ] Beratungs-Minispiel (Kundenandeutung → passende Kategorie)
- [ ] Bestellsystem mit Lieferzeit (`SupplierService`, noch nicht angelegt)
- [ ] Tagesabrechnung, Miete, Personalkosten
- [ ] Laden-Upgrades: Umkleide, Vorhang, zweite Kasse, Regalreihen
- [ ] Sichtachsen-System (`ExposedToStreet` automatisch aus Geometrie ableiten)
## Meilenstein 4 — Release-Vorbereitung
- [ ] Speichern/Laden (JSON, serverseitig)
- [ ] Steam-Seite, Age-Gate, Rating-Fragebogen (siehe CLAUDE.md §7)
- [ ] Controller-Support, Rebinding
- [ ] Lokalisierung DE/EN