1.7 KiB
1.7 KiB
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ündeltenNetworkListpro Regal zusammenfassen.- NPC-Zustand: ein Enum + ein Float für Sprechblasen. Mehr braucht der Client nicht.
Manuelles Netzwerk-Testen
File > Build Settings > Build(Development Build an)- Build starten → "Host"
- 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