
Auf dieser Seite finden Sie einen Überblick über PaddleBallSO, das Begleitdemoprojekt für das E-Book „Create modular game architecture in Unity with ScriptableObjects“, und es wird erläutert, wie es Designmuster und Modularität in seiner Codearchitektur nutzt.
Dies ist die erste in einer Reihe von sechs Mini-Anleitungen, die Unity Entwickler bei der Demo zum E-Book unterstützen sollen. Die Demo ist von klassischen Ball- und Schläger-Arcade-Spielmechaniken inspiriert und zeigt, wie Sie mit ScriptableObjects Komponenten erstellen können, die testbar, skalierbar und designfreundlich sind.
Das E-Book, das Demoprojekt und diese Mini-Anleitungen bieten zusammen bewährte Verfahren für die Verwendung von Programmierdesignmustern mit der Klasse ScriptableObject in Ihrem Unity Projekt. Diese Tipps können Ihnen helfen, Ihren Code zu vereinfachen, die Speichernutzung zu reduzieren und die Wiederverwendbarkeit von Code zu fördern.
Diese Serie umfasst die folgenden Artikel:
Bevor Sie sich mit dem ScriptableObject-Demoprojekt und dieser Reihe von Mini-Anleitungen befassen, sollten Sie bedenken, dass Designmuster im Kern nur Ideen sind. Sie gelten nicht für jede Situation. Diese Techniken können Ihnen helfen, neue Wege für die Arbeit mit Unity und ScriptableObjects zu erlernen.
Jedes Muster hat Vor- und Nachteile. Wählen Sie nur die aus, die für Ihr spezifisches Projekt von Bedeutung sind. Verlassen sich Ihre Designer stark auf den Unity Editor? Ein ScriptableObject-basiertes Muster kann eine gute Wahl sein, um ihnen bei der Zusammenarbeit mit Ihren Entwicklern zu helfen.
Letztendlich ist die beste Code-Architektur die, die zu Ihrem Projekt und Team passt.

PaddleBallSO konzentriert sich auf den Spieleklassiker, aus dem moderne Videospiele mit zwei Spielern, zwei Schlägern und einem Ball hervorgegangen sind.
Der Schwerpunkt liegt hier auf der Infrastruktur und nicht auf Spielmechaniken. Betrachten Sie dies als „Spieleinstallation“ – die weniger glamouröse, aber lebenswichtige Grundlage, die Ihre Anwendung am Laufen hält.
Dieses Projekt konzentriert sich darauf, wie ScriptableObjects hinter den Kulissen arbeiten können, um eine einheitliche Anwendung zu erstellen. Verwenden Sie sie, um vielseitige Spielsysteme zu konstruieren, die die Projektpflege vereinfachen und die Wiederverwendbarkeit von Code fördern können. Sie können sie auch für Spielerdaten, Spielzustandsmanagement, Spielverhalten und mehr verwenden.
Das PaddleBallSO-Projekt ist mit der neuesten Version des Unity Langzeit-Supports (LTS), derzeit 2022 LTS, kompatibel. Es enthält das UI Toolkit für die Erstellung der Laufzeit-UI und das Eingabesystem für die Handhabung der Benutzereingaben.

Suchen und laden Sie das Projekt im GitHub Repository herunter.
Laden Sie die Bootloader_scene oder aktivieren Sie im GameSystems-Menü die Bootstrap-Szene beim Spielen. Starten Sie den Play-Modus.
Obwohl diese nicht speziell für ScriptableObjects sind, verwendet das Demoprojekt einige gängige Techniken, um die Spielanwendung in einem konsistenten und vorhersehbaren Zustand zu starten.
Ein Scene Bootstrapper (oder Bootloader) ist ein Editor-Erweiterungsskript, das für die Einrichtung des Anfangszustands des Spiels verantwortlich ist. Dieser Initialisierungscode ist von der Spiellogik getrennt und stellt sicher, dass alle Abhängigkeiten für die Objekte in der Szene richtig eingerichtet sind.
Um Abhängigkeitsprobleme zu vermeiden, konfiguriert der Bootstrapper wesentliche Spielobjekte, Manager oder Dienste, wenn eine Szene geladen wird.
Wenn sich Ihre Unity Anwendung über mehrere Szenen erstreckt, kann der Bootloader das Laden einer bestimmten Bootstrap-Szene erzwingen, die die erste Szene aus den Build-Einstellungen ist. Beim Verlassen des Wiedergabemodus lädt der Editor die vorherige Szene neu.
Eine weitere Komponente in der Bootstrap-Szene, der Sequence Manager, kann dann wichtige Prefabs beim Laden der Szene instanziieren. In diesem spezifischen Demoprojekt ist alles, was Sie zur Erstellung des Spiels benötigen, ein Prefab, einschließlich einer Kamera, einem SplashScreen, Benutzeroberflächenmenüs und einem SceneLoader.
Der SceneLoader lädt dann bei Bedarf additiv alle Gameplay-Szenen. In den meisten Fällen bestehen diese Szenen hauptsächlich aus Prefabs.
Projektszenen
Jedes Minispiel-Level ist eine separate Unity Szene und erscheint in den Build-Einstellungen. Deaktivieren Sie den SceneBootstrapper im GameSystems-Menü, wenn Sie diese einzelnen Szenen erkunden möchten.
Viele Projekte enthalten auch einen Staging-Bereich für das Hauptmenü nach der Bootstrap-Szene. Bei diesem vereinfachten Demoprojekt wird eine Hauptmenüszene weggelassen.

Verwenden Sie die Play- und Pattern-Menüs, um PaddleBallSO zu testen, das Folgendes umfasst:
Der Core-Ordner enthält nicht anwendungsspezifische Teile der Codebasis, wie z. B. die grundlegenden Musterskripts, Szenenmanagement und Benutzeroberflächenlogik. Dies sind allgemeinere Klassen, die für eine Vielzahl von Anwendungen gelten könnten.

Das Beispielspiel stellt eine ikonische 2D Physiksimulation nach und zeigt das Potenzial von ScriptableObject-basierten Designmustern.
Bevor Sie in die Muster eintauchen, sollten Sie sich jedoch mit den MonoBehaviours vertraut machen, aus denen die Anwendung besteht. Wie zu erwarten, bestimmen Komponenten wie Paddle-, Ball-, Bouncer- und ScoreGoal-Skripte das einfache Gameplay.
Mehrere übergeordnete Manager-Skripte steuern den Spielfluss:
Diese MonoBehaviours funktionieren mit Ihren ScriptableObjects. Sie spielen eine entscheidende Rolle bei der Überbrückung dieser Komponenten, damit sie miteinander kommunizieren und Daten austauschen können.
Events dienen als Instrument für die Kommunikation zwischen verschiedenen Teilen des Projekts. Sie verbinden diese Manager-Skripte mit anderen Szenenobjekten und der Benutzeroberfläche. Diese ereignisgesteuerte Architektur kann dazu beitragen, Code organisierter und debuggbarer zu machen.
Wir haben auch vereinfachte Demobeispiele für jedes der gängigsten ScriptableObject-Muster bereitgestellt. Wenn Sie sich mit ihnen vertraut machen, werden Sie erkennen, wie ScriptableObjects die Architektur des Minispiels unterstützen.
Wir hätten das vorgestellte Minispiel mit viel weniger Codezeilen erstellen können, aber diese Demo konzentriert sich speziell auf Designmuster mit ScriptableObjects. Beachten Sie, dass Sie viele dieser Muster auch ohne ScriptableObjects implementieren können.
Entscheiden Sie als Team, wie die einzelnen Muster auf Ihr Projekt angewendet werden können, und wählen Sie den Ansatz aus, der für Sie am besten geeignet ist.

Modularität in der Softwareentwicklung bedeutet, eine Anwendung in kleinere, unabhängigere Teile zu zerlegen. Diese Module dienen spezifischen Zwecken und können separat entwickelt und getestet werden.
Jeder kleine Satz von Objekten funktioniert als eine Einheit und behandelt einen Aspekt des Spiels. Dies kann alles Mögliche sein, von der Kontrolle der Spielereingabe über den Umgang mit der Physik bis hin zur Bewertung des Ergebnisses.
Achten Sie beim Erkunden der Projektskripte auf die folgenden wichtigen Erkenntnisse:
Das Refactoring eines großen monolithischen Skripts in kleinere Teile fördert die Wiederverwendbarkeit und Skalierbarkeit. Dies führt zu einer verbesserten Zusammenarbeit im Team und vereinfachten Tests.

Wir haben das PaddleBallSO-Projekt erstellt, um Anwendungsfälle für ScriptableObject zu demonstrieren. Hier sind einige Orte, an denen Sie sie in Aktion sehen können:
Sehen Sie sich unbedingt auch die Designmusterdemos an, um ein paar Extras zu erhalten!

ScriptableObjects können zwar ein leistungsstarkes Tool zum Speichern von Spieldaten und Optimieren Ihres Workflows sein, aber es ist unerlässlich, sie effektiv zu nutzen, um Unordnung in Ihrem Projekt zu vermeiden.
Hier finden Sie einige bewährte Verfahren für die Verwendung von ScriptableObjects in Unity:
Wenn Sie diese Richtlinien befolgen, vermeiden Sie gängige Fallstricke bei der Entwicklung.

Lesen Sie mehr über Designmuster mit ScriptableObjects im E-Book Erstellen Sie modulare Spielarchitektur in Unity mit ScriptableObjects. Weitere Informationen zu gängigen Designmustern in der Unity-Entwicklung finden Sie im E-Book. Verbessern Sie Ihren Code mit Spielprogrammierungsmustern.