# Package-Anzeige einrichten (Karton & Regalfach) Wie man `PackageDisplay` (Karton-Inhalt, Regal-Bestand) so einstellt, dass Verpackungen sauber ausgerichtet und ohne Überlappen im Raster liegen. Betrifft `Lieferkarton.cs` und `ShelfSlot.cs` — beide haben dieselben vier Inspector-Felder unter „Anzeige-Raster". ## Kurzfassung: ja, das ist alles konfigurierbar Kein Code nötig. Vier Felder pro Objekt: | Feld | Bedeutung | |--------------------------|--------------------------------------------------------------| | `_displayColumns` | Päckchen pro Reihe (X-Achse im lokalen Raum) | | `_displayRows` | Reihen pro Lage (Z-Achse), bevor eine neue Lage nach oben beginnt | | `_displaySpacing` | Abstand zwischen Päckchen-Mittelpunkten (X/Y/Z in Metern) | | `_displayRotationEuler` | Zusätzliche Rotation (Grad), mit der jedes Päckchen platziert wird | Die Formel dahinter (`PackageDisplay.SlotLocalPosition`): ``` Lage = Index / (Spalten × Reihen) Rest = Index % (Spalten × Reihen) Reihe = Rest / Spalten Spalte= Rest % Spalten Position = (Spalte × spacing.x, Lage × spacing.y, Reihe × spacing.z) ``` ## Warum die Päckchen "komisch" aussehen Zwei typische Ursachen — beide liegen am **Prefab selbst**, nicht am Raster-Code: ### 1. Falscher Pivot (Ursprung) im Prefab `PackageDisplay` setzt `transform.localPosition` direkt auf die berechnete Rasterposition — **bezogen auf den Ursprung (Pivot) des Prefabs**, nicht auf seine sichtbare Bounding Box. Sitzt der Pivot z. B. an einer Ecke statt im Zentrum/am Boden-Mittelpunkt der Verpackung, wirkt die Platzierung „verschoben" oder die Päckchen scheinen im Boden zu versinken bzw. zu schweben. **Fix:** Pivot des `PackagePrefab` im 3D-Tool (Blender) auf den Boden- Mittelpunkt setzen, bevor es exportiert/als Prefab gebaut wird. Faustregel: wenn's wie eine Kiste auf dem Boden stehen soll, Pivot unten-mittig; wenn's im Regal frei "schwebend zentriert" wirken soll, Pivot im geometrischen Zentrum. ### 2. Falsche Grundausrichtung im Prefab Bisher wurde jedes Päckchen mit `Quaternion.identity` platziert — also exakt so gedreht, wie es importiert wurde. Wurde das Modell in Blender nicht "aufrecht" (Unity: +Y = oben, +Z = vorne) exportiert, liegen die Päckchen im Raster auf der Seite oder verdreht. **Fix jetzt eingebaut:** `_displayRotationEuler` gleicht das aus, ohne das Modell neu exportieren zu müssen. Einfach im Inspector die nötige Korrektur eintragen (z. B. `(-90, 0, 0)`, falls das Modell "liegend" exportiert wurde und eigentlich aufrecht stehen sollte) — Werte am besten per Trial-and-Error im Play-Mode justieren, man sieht die Wirkung sofort. ## Spacing & Größe aufeinander abstimmen `_displaySpacing` ist der Abstand zwischen den **Mittelpunkten** benachbarter Päckchen, keine automatische Kollisionsvermeidung. Zu klein → Päckchen überlappen sich sichtbar. Zu groß → unnötige Lücken, und es passen weniger rein als gedacht. So ermittelst du einen guten Wert: 1. Das `PackagePrefab` per Drag&Drop in eine leere Szene ziehen (oder im Project-Fenster anklicken und die Bounds im Scene-View-Gizmo ablesen). 2. Größte Kantenlänge in Metern ablesen (Unity: 1 Unit = 1 Meter). 3. `_displaySpacing` je Achse auf **Kantenlänge × ca. 1,1–1,3** setzen (kleiner Puffer gegen Berührung/Z-Fighting). Beispiel: Päckchen ist 0,08 m breit/tief, 0,12 m hoch → `_displaySpacing ≈ (0.10, 0.14, 0.10)`. ## Spalten/Reihen an die Behälter-Größe anpassen - **Lieferkarton**: `_displayColumns`/`_displayRows` grob an die Innenmaße des Kartons anpassen (Spalten × Reihen × Spacing sollte nicht größer sein als die Kartonöffnung — sonst "schwebt" ein Teil der Päckchen sichtbar über dem Kartonrand). - **ShelfSlot**: analog zur `_capacityUnits`/Fachbreite. Aktuell Default 4×3 = 12 Plätze pro Lage, passend zur Standard-`_capacityUnits: 12` bei `ShelfSize.Small`. Bei größeren Produkten (`Medium`/`Large`, siehe `ProductDefinition.ShelfSize`) verringert sich die effektive Kapazität automatisch (`ShelfSlot.Capacity()`) — Raster-Werte ggf. mit anpassen, damit die sichtbare Anzeige zur tatsächlichen Kapazität passt. ## Troubleshooting | Symptom | Wahrscheinliche Ursache | Fix | |--------------------------------------------|---------------------------------------------|-----| | Päckchen liegen auf der Seite / verdreht | Prefab-Grundausrichtung falsch | `_displayRotationEuler` justieren | | Päckchen schweben über/versinken im Boden | Pivot des Prefabs nicht am Boden-Mittelpunkt| Pivot in Blender korrigieren, oder `_displaySpacing.y`/Lagenhöhe grob kompensieren | | Päckchen überlappen sich sichtbar | `_displaySpacing` kleiner als Prefab-Größe | Spacing erhöhen (siehe Formel oben) | | Zu viele/wenige Päckchen sichtbar | `_maxVisiblePackages` (Karton) bzw. `Capacity()` (Regal) vs. Raster-Kapazität passen nicht zusammen | `_displayColumns × _displayRows` an tatsächliche Kapazität anpassen | | Fliegendes Päckchen landet anders gedreht als die ruhenden im Regal | War bis eben ein Bug (Flug nutzte rohe Transform-Rotation statt `_displayRotationEuler`) | Bereits gefixt: `ShelfSlot.GetSlotWorldRotation()` berücksichtigt jetzt beide | ## Kurz zusammengefasst Keine der Zahlen ist "fest verdrahtet" — alle vier Felder sind Inspector- Werte, extra dafür da, unterschiedliche Produkt-Prefabs ohne Code-Änderung einzupassen. Der eigentliche Hebel für "richtig ausgerichtet" ist aber meist der Pivot/die Grundrotation des Prefabs selbst — das Raster kann nur die *Anordnung*, nicht die *Modellierung* korrigieren (außer über `_displayRotationEuler` als Ausgleich).