Adressierbare Objekte: Planung und bewährte Methoden

Spiele sind heute größer als je zuvor. Da sie die Grenzen der modernen Gerätehardware immer weiter ausloten, wird es für Entwickler zunehmend wichtiger, Inhalte zur Laufzeit effizient zu verwalten. Und da die Herausgeber bestrebt sind, die Kundenbindung und Monetarisierung ihrer Spiele zu optimieren, sind ein kleiner Spiele-Client und dynamische drahtlose Inhaltsaktualisierungen zu Grundvoraussetzungen für viele erfolgreiche Spiele geworden.
Unity bietet eine End-to-End-Pipeline, die Entwicklern und Publishern dabei hilft, auf dem heutigen Gaming-Markt erfolgreich zu sein. Diese Pipeline beginnt und endet mit Addressables, einem Unity-Paket , das 2019 eingeführt wurde und heute Tausende erfolgreicher Live-Spiele und Zehntausende weitere in der Entwicklung unterstützt.
Das Addressables-Paket bietet eine Benutzeroberfläche (UI) und eine API zum Organisieren von Unity-Assets, die in AssetBundles integriert und zur Laufzeit dynamisch geladen und entladen werden sollen. Unabhängig davon, ob AssetBundles mit Ihrem Basisspiel ausgeliefert oder von einem Remote-Content-Delivery-Network (CDN) wie Cloud Content Deliverygehostet und bereitgestellt werden, hilft Addressables Ihnen dabei, die benötigten Assets nur dann zu laden, wenn Sie sie benötigen.
Obwohl das Addressables-System viele Aspekte der Inhaltsverwaltung vereinfachen kann, handelt es sich hierbei nicht um eine Funktion nach dem Motto „einmal einrichten und vergessen“. Die Entscheidungen, die Sie hinsichtlich der Organisation, Erstellung, Beladung und Entladung adressierbarer Assets treffen, haben erhebliche Auswirkungen auf die Größe und Leistung Ihres Spiels.
In diesem Handbuch werden einige der wichtigsten Faktoren untersucht, die Sie berücksichtigen sollten, um das Addressables-System optimal zu nutzen. Am Ende dieses Blogs finden Sie hilfreiche „Spickzettel“ mit allgemeinen Einstellungen und Strategieempfehlungen basierend auf gängigen Addressables-Anwendungsfällen.
Die beste Strategie hängt natürlich von dem Spiel ab, das Sie erstellen, und von Ihren Zielen. Betrachten Sie diesen Leitfaden als Referenz, die zusammen mit Unity-Learn- Materialien, der Unity- Handbuchdokumentation und dem Community-gesteuerten Forum für Addressablesverwendet werden kann.
Im Kern ist Addressables ein Tool zum Erstellen und Arbeiten mit AssetBundles. Bevor Sie sich in die Benutzeroberfläche und API von Addressables vertiefen, ist es wichtig, sich mit dem AssetBundles-Archivdateiformat und einigen seiner Laufzeitimplikationen vertraut zu machen.
Sie können sich AssetBundles als Container vorstellen – es handelt sich dabei um Archivdateien, die für Ihre Zielplattformen erstellt werden und Assets wie Modelle, Texturen, Prefabs, ScriptableObjects, Audioclips und sogar ganze Szenen enthalten können, die Unity zur Laufzeit laden kann.
Ein wesentliches Merkmal von AssetBundles besteht darin, dass sie Abhängigkeiten untereinander ausdrücken können. Beispielsweise könnte AssetBundle 1 ein Prefab enthalten, das von einer Textur in AssetBundle 2 abhängt. Wenn Sie Addressables verwenden, um das Prefab zur Laufzeit zu laden, lädt das Addressables-System AssetBundle 2 und die abhängige Textur automatisch in den Speicher. Und wenn AssetBundle 1 ein anderes Asset hat, das von einem Asset in AssetBundle 3 abhängt, wird auch AssetBundle 3 in den Speicher geladen usw.

Wenn Ihr Spiel ausgeführt wird, verfolgt das Addressables-System aktive Referenzen für alle Assets – einschließlich abhängiger Assets wie die oben besprochene Textur – um zu bestimmen, welche im Speicher sein müssen. Ein aus einem AssetBundle geladenes Asset kann erst aus dem Speicher freigegeben werden, wenn sowohl sein Referenzzähler als auch alle anderen Asset-Referenzzähler im selben AssetBundle 0 ergeben. Das AssetBundle selbst kann nur dann aus dem Speicher freigegeben werden, wenn alle Asset-Referenzzähler im AssetBundle 0 ergeben.
Wenn Sie diese enge Beziehung zwischen Addressables und AssetBundles im Hinterkopf behalten, besteht die wichtigste Regel beim Organisieren Ihrer Addressables-Inhalte darin , AssetBundles zu erstellen, die diskrete Asset-Sets enthalten, die voraussichtlich zusammen geladen und entladen werden.
Die wichtigste Entscheidung, die Sie bei der Verwendung von Addressables wahrscheinlich treffen werden, ist, wie Sie Ihre Assets in Addressables-Gruppen organisieren. Hier sind einige Fragen, die Sie berücksichtigen sollten:
- Sollten Sie viele kleine Gruppen oder eine kleinere Anzahl großer Gruppen erstellen?
- Wie viele AssetBundles sollten Sie für jede Gruppe generieren (d. h. sollten Sie die Assets in dieser Gruppe zusammen, separat oder nach Bezeichnung packen)?
- Sollten Sie Etiketten verwenden?
- Sollten Sie Ihren Gruppen lokale oder Remote-Ladepfade zuweisen?
Wir würden zwar gerne eine einheitliche Antwort geben, die beste Gruppierungsstrategie für adressierbare Elemente hängt jedoch von mehreren Faktoren ab, die für Ihr Spiel spezifisch sind.
Erinnern: Adressierbare Gruppen stellen die Organisationsstruktur für Ihre adressierbaren Assets bereit, die bestimmt , wie diese Assets in AssetBundles integriert werden. Die beste Organisationsstrategie ist daher diejenige, bei der Ihre AssetBundles basierend auf der einzigartigen Struktur, den Zielen und Einschränkungen Ihres Spiels am effektivsten verpackt, geladen und entladen werden .
Bevor Sie mit der Organisation Ihrer Addressables-Inhalte beginnen, stellen Sie sicher, dass Sie Folgendes verstanden haben:
1. Die Struktur und Roadmap Ihres Spiels
2. Stärken und Einschränkungen der Plattform Ihres Spiels
3. Ihr(e) Hauptziel(e) bei der Verwendung von Addressables zur Optimierung der Leistung Ihres Spiels
Wir werden im Folgenden auf jeden dieser Faktoren eingehen.
Der erste zu berücksichtigende Faktor ist die Struktur und Roadmap Ihres Spiels.
Mit „Struktur“ meinen wir die eigentliche Architektur Ihres Spiels. Handelt es sich bei Ihrem Spiel um eine lineare Einzelspieler-Reise, bei der der Spieler durch eine vorhersehbare Reihe von Levels oder Umgebungen voranschreitet? Handelt es sich um ein plattformübergreifendes PvP-Spiel mit Tausenden von Luxusgegenständen, die zu unvorhersehbaren Zeiten aktiviert werden könnten? Die Struktur Ihres Spiels bestimmt, wann Sie Assets geladen und einsatzbereit haben müssen und wann Sie Assets und AssetBundles aus dem Speicher entladen können.
Denken Sie daran, versuchen Sie, AssetBundles zu erstellen, die nur die Assets enthalten, die zusammen geladen werden müssen und zusammen entladen werden können. Wenn Ihr Spiel eine lineare Reise mit deutlichen Unterbrechungspunkten ist, sollten Sie die adressierbaren Gruppen in größere Inhaltsuntergruppen organisieren, die mit den einzelnen Abschnitten Ihres Spiels verknüpft sind. Auf diese Weise können diese Vermögenswerte zusammen geladen und entladen werden.
Wenn Ihr Spiel nicht linear und eher unvorhersehbar ist, entscheiden Sie sich für kleinere Gruppen, die kleinere AssetBundles generieren, sodass Sie dynamischer laden und entladen können. Versuchen Sie immer, logische und aussagekräftige Namen für Ihre Gruppen zu verwenden, damit Sie Assets schnell finden und Ihr Layout optimieren können.
„Roadmap“ bezieht sich darauf, wie sich Ihr Spiel im Laufe der Zeit entwickeln wird. Bleibt Ihr Spiel, nachdem es an die Spieler ausgeliefert wurde, abgesehen von gelegentlichen Fehlerbehebungen oder Patches zur Spielbalance weitgehend unverändert? Oder erwarten Sie, regelmäßig neue Inhalte hinzuzufügen, ohne dass Ihre Spieler ein großes Client-Update installieren müssen?
Ihre Inhalts-Roadmap hilft Ihnen bei der Entwicklung Ihrer Gruppierungsstrategie. Wenn der Inhalt Ihres Spiels in sich geschlossen ist und nach dem Start nicht aktualisiert wird, konzentrieren Sie Ihre Gruppierungsstrategie auf die oben besprochenen strukturellen Überlegungen. Wenn für Ihr Spiel häufige Inhaltsaktualisierungen erforderlich sind, gruppieren Sie Ihre Inhalte so, dass die Spieler genau das herunterladen können, was sie benötigen, wenn sie es benötigen.
Erwägen Sie die Verwendung von Beschriftungen, um Inhalte aus unterschiedlichen Paketen zu identifizieren, die zur Laufzeit zusammen benötigt werden, z. B. ein Satz kosmetischer Elemente, der mit der Zeit mit der Weiterentwicklung Ihres Spiels erweitert wird. Sie können auch den Bündelmodus „Nach Bezeichnung zusammenpacken“ in Ihren Gruppeneinstellungen verwenden, um Inhalte, die Sie logisch gruppiert haben, zu unterteilen.
Vielleicht planen Sie beispielsweise, ein neues „Halloween 2023“-Event mit einigen kosmetischen Gegenständen zu starten, die die Spieler sammeln können. Ihre Gruppe „Halloween-Outfits 2023“ enthält möglicherweise Assets mit den Bezeichnungen „Hüte“, „Schuhe“ und „Masken“. Sie könnten dann allen Assets in dieser Gruppe die Bezeichnung „Halloween 2023“ hinzufügen. Wenn Sie für diese Gruppe den Bundle-Modus „Nach Label zusammenpacken“ verwenden, werden zur Build-Zeit drei AssetBundles erstellt.
Zur Laufzeit können Sie dann alle adressierbaren Assets mit der Bezeichnung „Hüte“ in Ihren Charakteranpassungsbildschirm laden, um sicherzustellen, dass alle Assets mit dieser Bezeichnung heruntergeladen, in den Speicher geladen und für die Spieler zur Anzeige bereitstehen. Oder Sie laden alle adressierbaren Assets mit der Bezeichnung „Halloween 2023“ auf Ihre Werbeseite für Ihre Veranstaltung und stellen so sicher, dass sie für die Anzeige für Ihre Spieler bereit sind.


Wenn Sie die Struktur und Roadmap Ihres Spiels genau kennen, können Sie fundierte Entscheidungen zur Organisation Ihrer Inhalte treffen, die Ihnen während des gesamten Lebenszyklus Ihres Spiels von Nutzen sind.
Als Nächstes befassen wir uns mit den spezifischen Stärken und Schwächen Ihrer Plattformen und deren Bedeutung für Ihre Content-Strategie.
Der nächste zu berücksichtigende Faktor sind die Stärken und Schwächen der Plattformen, die Sie für die Verbreitung anvisieren. In diesem Abschnitt haben wir allgemeine Plattformziele für Addressables-Benutzer sowie einige wichtige Überlegungen zu jedem dieser Ziele skizziert.
Mobile und VR
Bei Mobil- und VR-Plattformen sind die wichtigsten zu berücksichtigenden Aspekte die App-Größe, die Größe des gebündelten Inhalts und die Download-Geschwindigkeit.
Berücksichtigen Sie für Ihre Gruppen die Inhalte, die Ihre Spieler unmittelbar nach der Installation benötigen (z. B. um Ihr Tutorial abschließen zu können). Stellen Sie sicher, dass dieser Inhalt in Gruppen mit lokalen Ladepfaden organisiert ist, sodass er in Ihr Basisspiel aufgenommen wird. Organisieren Sie alle anderen Inhalte in Gruppen mit Remote-Ladepfaden, damit Sie diese Inhalte drahtlos an Ihre Player bereitstellen können.
Entscheiden Sie sich für eine Gruppenstrategie, bei der relativ kleine AssetBundles erstellt werden. Das genaue Gleichgewicht hängt von Ihrem Spiel ab. Vermeiden Sie extrem große Pakete, die viel Speicher verbrauchen und nach dem Laden nur schwer freigegeben werden können. Vermeiden Sie außerdem eine große Anzahl kleiner Pakete, die möglicherweise eine sehr große Addressables-Katalogdatei erstellen, die bei jeder Inhaltsaktualisierung heruntergeladen werden muss. Viele kleine Pakete können sich auch auf die Geschwindigkeit auswirken, mit der Ihre Spieler die benötigten Inhalte herunterladen können. Berücksichtigen Sie daher diese Vor- und Nachteile, wenn Sie die richtige Balance für Ihr Spiel bestimmen.
Desktop und Konsolen
Bei Desktops und Konsolen ist die Leistungdie wichtigste Überlegung. Im Vergleich zu Mobilgeräten und drahtloser VR-Hardware unterliegen Desktop- und Konsolenhardware in der Regel weniger Einschränkungen hinsichtlich Arbeitsspeicher und Festplattenspeicher. Bedenken Sie dies und ziehen Sie eine Gruppeneinstellung in Betracht, die unkomprimierte AssetBundles erstellt. Dadurch wird die schnellstmögliche Ladezeit gewährleistet und auf bestimmten Plattformen kann sogar ein effizientes Patchen ermöglicht werden.
Wenn Sie speziell für Konsolen entwickeln, achten Sie besonders auf eventuell geltende plattformspezifische Caching-Einschränkungen . Während Sie auf mobilen Plattformen den AssetBundle-Cache von Unity für heruntergeladene Inhalte nutzen können, ist diese Funktion auf der Ebene der Unity-Engine für bestimmte Konsolen und WebGLstandardmäßig deaktiviert. Erwägen Sie, Ihr Basisspiel mit den neuen Inhalten auf diesen Plattformen zu aktualisieren, anstatt zu versuchen, Remote-Inhalte drahtlos bereitzustellen. Andernfalls müssen Sie Ihr eigenes benutzerdefiniertes AssetBundle-Caching-System erstellen und feststellen, ob Ihre Lösung den Nutzungsbedingungen dieser Plattformen entspricht.
Nachdem Sie die Stärken und Schwächen Ihrer Zielplattformen ausgewertet haben, legen Sie ein oder zwei Hauptziele fest, die Sie mithilfe des Addressables-Systems erreichen möchten. Zum Beispiel: Ist Ihr Hauptziel die Reduzierung der Größe Ihres Basisspiels oder planen Sie, den Spielern Inhaltsaktualisierungen drahtlos bereitzustellen? Zur Veranschaulichung besprechen wir diese und weitere Optionen weiter unten im Detail.
Minimieren der Größe des Basisspiels
Wenn Ihr Hauptziel darin besteht, die Größe Ihres Basisspiels zu minimieren, und Sie sich nicht so viele Gedanken über Speicherbeschränkungen oder große Downloads nach der Installation machen, sollte Ihr Hauptaugenmerk darauf liegen, möglichst viele Assets aus Szenen und Ressourcen in eine oder mehrere adressierbare Gruppen mit Remote-Ladepfaden zu migrieren.
Überlegen Sie, die Szenen in Ihrem Projekt adressierbar zu machen, und legen Sie fest, welche (falls vorhanden) in den Haupt-Player-Build einbezogen werden müssen. Schließen Sie die Szenen, die den Playern nach der Installation bereitgestellt werden können, in Gruppen mit Remote-Ladepfaden ein. Sie können sogar einen Player mit einer fast leeren Szene erstellen und den Rest Ihres Spiels dynamisch von dort aus laden, wie in diesem Open Projects Devlog- Video erläutert.

Wenn Sie Szenen adressierbar machen, sollten Sie am besten alle adressierbar machen, um die Wahrscheinlichkeit und den Umfang einer unnötigen Asset-Duplizierung zu verringern.
Aktivieren Sie für Gruppen, die AssetBundles zur Remote-Hosting generieren, unbedingt den AssetBundle-Cache. Diese Einstellung stellt sicher, dass heruntergeladene AssetBundles auf den Geräten Ihrer Player zwischengespeichert werden, sodass sie nicht bei jeder Sitzung erneut heruntergeladen werden müssen.
Es ist zwar immer gut, die Laufzeitauswirkungen vieler kleiner Pakete im Vergleich zu wenigen großen Paketen im Auge zu behalten, diese Überlegungen werden jedoch relevanter, wenn Sie andere Ziele in Betracht ziehen, die Sie möglicherweise haben.
Effiziente Bereitstellung von Remote-Inhalten für Spieler
Wenn Ihr Hauptziel die effiziente Bereitstellung von Remote-Inhalten ist, sollte Ihre Gruppenstruktur widerspiegeln, wie Sie die Inhalte zwischen „lokalen“ (also in Ihrem Player-Build enthaltenen Assets) und „Remote-Inhalten“ (also Assets, die in einem externen Content Delivery Network gehostet werden) aufteilen möchten. Denken Sie auch hier daran, den AssetBundle-Cache zu aktivieren, um heruntergeladene Inhalte auf den Geräten der Spieler zwischenzuspeichern.
Die Größe, Anzahl und der Bundle-Modus dieser Gruppen hängen davon ab, wann Sie Ihren Playern voraussichtlich Remote-Inhalte bereitstellen möchten und wie lange Sie sie auf den Abschluss der Downloads warten lassen möchten. Wenn die Struktur Ihres Spiels beispielsweise die Bereitstellung aller Remote-Inhalte kurz nach der Installation des Basisspiels ermöglicht, können Sie sich mit „Pack Together“ oder „Pack Together By Label“für größere Gruppen entscheiden, was zu einer kleinen Anzahl großer Downloads führt.
Wenn Sie den Spielern während ihrer Sitzungen kleinere Sätze von Remote-Inhalten bereitstellen möchten, die das Spielerlebnis weniger stören, können Sie sich für kleinere Gruppen und/oder eine Bundle-Modus-Einstellung entscheiden, die kleinere AssetBundles generiert, die viel schneller heruntergeladen werden können.
Erwägen Sie in den meisten Fällen für Gruppen mit Remote-Inhalten die Option „Aktiviert, ausgenommen zwischengespeicherte Inhalte“ für Ihre AssetBundle-CRC-Option (Cyclic Redundancy Check). Dadurch wird die Integrität Ihrer Remote-Inhalte beim Zwischenspeichern auf den Geräten der Player zusätzlich gewährleistet. Gleichzeitig wird der zusätzliche Aufwand für die Durchführung eines CRC zum Laden von Inhalten vermieden, die sich bereits auf den Geräten der Player befinden.
Optimieren der Laufzeitspeichernutzung und Leistung
Wenn Ihr Hauptziel darin besteht, die Laufzeitleistung und Speichernutzung des Spiels zu optimieren, denken Sie an die wichtigste Regel bei der Organisation adressierbarer Gruppen: Vermögenswerte, die Sie gleichzeitig laden und entladen möchten, sollten gruppiert werden.
Im Allgemeinen bedeutet dies, dass kleinere AssetBundles erstellt werden. Sie können dies auf verschiedene Weise erreichen, beispielsweise durch die Erstellung kleinerer Gruppen und/oder durch das Vermeiden des Bündelmodus „Zusammenpacken“ in Ihren Gruppeneinstellungen für große Gruppen, die Assets enthalten, die in Ihrem Spiel nicht immer gleichzeitig benötigt werden.
Sie sollten auch die Laufzeitleistung im Auge behalten, um potenzielle Probleme oder Optimierungsbereiche zu erkennen. Nutzen Sie offizielle Unity-Tools wie den Unity Profiler, das Memory Profiler- Paket oder den Addressables Event Viewer, die alle dazu beitragen können, die Leistung Ihres Spiels zu optimieren.
Halten Sie Ausschau nach dem kommenden Addressables Profiler Module, das den Addressables Event Viewer ersetzen wird. Dieses neue Tool bietet noch ausführlichere Informationen darüber, wie Ihr Code adressierbare Assets und AssetBundles lädt und entlädt, einschließlich ausführlicher Informationen zu Abhängigkeiten zwischen Ihren Assets und AssetBundles.
Mehrere Ziele
Natürlich sind mit Addressables bei den meisten Projekten eine Reihe von Zielen verknüpft. In diesem Fall gibt es wirklich keinen Ansatz, der für alle passt. Sie müssen die oben beschriebenen Kompromisse abwägen und die Gruppenstruktur und -einstellungen finden, mit denen Sie den von Ihnen definierten Erfolg am besten erzielen.
Wir empfehlen Ihnen, den Addressables Build Report und das Addressables Profiler Modulezu nutzen, die bald in Addressables 1.21.3 verfügbar sind. Der Addressables Build Report bietet Ihnen detaillierte Informationen zu den AssetBundles, die aus Ihren Addressables Builds generiert wurden, einschließlich Dateigröße, möglichen Duplikaten und umfassenden Abhängigkeitsinformationen. Das Addressables Profiler-Modul ist ein neues Laufzeitanalysetool, das diese neuen Abhängigkeitsdaten nutzt und genaue Informationen darüber liefert, was von Ihrem Addressables-Code geladen wurde und warum es geladen wurde.
Nachfolgend haben wir basierend auf einigen der gängigsten Anwendungsfälle einige praktische „Spickzettel“ für unsere empfohlenen Addressables-Einstellungen und -Strategien bereitgestellt. Natürlich handelt es sich dabei nur um Vorschläge. Sie müssen selbst entscheiden, ob ein Vorschlag zur individuellen Struktur Ihres Projekts und Ihren spezifischen Zielen passt.
- Ein Handyspiel mit häufigen Inhaltsaktualisierungen
- Ein eigenständiges, in sich geschlossenes Desktop- oder Konsolenspiel
- Ein VR-Spiel für Meta Quest 2
Wenn Sie Fragen haben oder mehr über das Addressables-Paket erfahren möchten, besuchen Sie uns im Addressables- Forum. Sie können mich auch direkt auf Twitter unter @Unity_Jefferreichen. Achten Sie auf neue technische Blogs von anderen Unity-Entwicklern im Rahmen der laufenden Technik aus der Trenches- Reihe.