Files
SixShopSimulator/docs/ARCHITECTURE.md
T
2026-08-10 19:23:04 +02:00

39 lines
1.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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