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

1.7 KiB
Raw Blame History

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