initial
This commit is contained in:
@@ -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 20–30 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
|
||||
Reference in New Issue
Block a user