• Spiele
  • Branche
  • Ressourcen
  • Community
  • Lernen
  • Support
Entwicklung
Unity Engine
Erstellen Sie 2D- und 3D-Spiele für jede Plattform
HerunterladenAbonnements und Preise
Monetarisierung
In-App-Kauf (IAP)
Entdecken und verwalten Sie IAP über die Stores
Mediation
Maximieren Sie den Umsatz und optimieren Sie die Monetarisierung
Anzeigenqualität
Schützen Sie das Benutzererlebnis Ihrer App
Tapjoy
Langfristige Benutzerloyalität aufbauen
Alle Monetarisierungsprodukte
Nutzerakquisition
Nutzerakquisition
Entdecken Sie und gewinnen Sie mobile Benutzer
Unity Vector AI
Verbinden Sie Spieler mit den richtigen Spielen
Aura On-Device-Werbung
Erreichen Sie Benutzer auf dem Gerät zur Spitzenzeit der Interaktion
Alle Wachstumsprodukte
Anwendungsfälle
3D-Zusammenarbeit
Erstellen und überprüfen Sie 3D-Projekte in Echtzeit
Immersive Schulung
In immersiven Umgebungen trainieren
Kundenerlebnisse
Interaktive 3D-Erlebnisse erstellen
Alle branchenspezifischen Lösungen
Branchen
Fertigung
Betriebliche Exzellenz erreichen
Einzelhandel
In-Store-Erlebnisse in Online-Erlebnisse umwandeln
Automobilindustrie
Innovation und In-Car-Erlebnisse steigern
Alle Branchen
Technische Bibliothek
Dokumentation
Offizielle Benutzerhandbücher und API-Referenzen
Entwicklertools
Versionsfreigaben und Fehlerverfolgung
Roadmap
Bevorstehende Funktionen überprüfen
Glossar
Bibliothek technischer Begriffe
Einblicke
Fallstudien
Erfolgsgeschichten aus der Praxis
Best-Practice-Leitfäden
Experten Tipps und Tricks
Alle Ressourcen
Neues
Blog
Aktualisierungen, Informationen und technische Tipps
Neuigkeiten
Nachrichten, Geschichten und Pressezentrum
Community Hub
Diskussionen
Diskutieren, Probleme lösen und verbinden
Veranstaltungen
Globale und lokale Veranstaltungen
Gemeinschaftsgeschichten
Made with Unity
Präsentation von Unity-Schöpfern
Livestreams
Schließen Sie sich Entwicklern, Kreativen und Insidern an
Unity Awards
Feier der Unity-Schöpfer weltweit
Für jedes Niveau
Unity Learn
Meistern Sie Unity-Fähigkeiten kostenlos
Professionelles Training
Verbessern Sie Ihr Team mit Unity-Trainern
Neu bei Unity
Erste Schritte
Beginnen Sie noch heute mit dem Lernen
Unity Essential Pathways
Sind Sie neu bei Unity? Starten Sie Ihre Reise
Anleitungen
Umsetzbare Tipps und bewährte Verfahren
Bildung
Für Studierende
Starten Sie Ihre Karriere
Für Lehrkräfte
Optimieren Sie Ihr Lehren
Lizenzstipendium für Bildungseinrichtungen
Bringen Sie die Kraft von Unity in Ihre Institution
Zertifizierungen
Beweisen Sie Ihre Unity-Meisterschaft
Kundendienstoptionen
Hilfe erhalten
Wir helfen Ihnen, mit Unity erfolgreich zu sein
Erfolgspläne
Erreichen Sie Ihre Ziele schneller mit Expertenunterstützung
FAQ
Antworten auf häufige Fragen
Kontakt aufnehmen
Verbinden Sie sich mit unserem Team
Abonnements und Preise
Sprache
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
Sozial
Währung
Kaufen
  • Produkte
  • Unity Ads
  • Abonnement
  • Unity Asset Store
  • Wiederverkäufer
Bildung
  • Schüler/Studierende
  • Lehrkräfte
  • Einrichtungen
  • Zertifizierung
  • Learn
  • Programm zur Entwicklung von Fähigkeiten
Herunterladen
  • Unity Hub
  • Datei herunterladen
  • Beta-Programm
Unity Labs
  • Labs
  • Veröffentlichungen
Ressourcen
  • Lernplattform
  • Community
  • Dokumentation
  • Unity QA
  • FAQ
  • Status der Dienste
  • Fallstudien
  • Made with Unity
Unity
  • Unser Unternehmen
  • Newsletter
  • Blog
  • Veranstaltungen
  • Stellenangebote
  • Hilfe
  • Presse
  • Partner
  • Investoren
  • Partner
  • Sicherheit
  • Social Impact
  • Inklusion & Vielfalt
  • Kontakt aufnehmen
Copyright © 2025 Unity Technologies
  • Rechtliches
  • Datenschutzrichtlinie
  • Cookies
  • Verkaufen oder teilen Sie nicht meine personenbezogenen Daten

"Unity", Unity-Logos und sonstige Marken von Unity sind Marken oder eingetragene Markenzeichen von Unity Technologies oder den zugehörigen verbundenen Unternehmen in den USA und anderen Ländern (weitere Informationen finden Sie hier). Alle anderen Namen oder Marken sind Marken ihrer jeweiligen Eigentümer.

Hero background image

Verwenden Sie ScriptableObject-basierte Enums in Ihrem Unity-Projekt

Diese Website wurde aus praktischen Gründen für Sie maschinell übersetzt. Die Richtigkeit und Zuverlässigkeit des übersetzten Inhalts kann von uns nicht gewährleistet werden. Sollten Sie Zweifel an der Richtigkeit des übersetzten Inhalts haben, schauen Sie sich bitte die offizielle englische Version der Website an.
Klicken Sie hier.

Diese Seite erklärt, wie Sie ScriptableObject-basierte Enums in Ihrem Unity-Projekt verwenden.

Dies ist der dritte Teil einer Reihe von sechs Mini-Guides, die Unity-Entwicklern mit der Demo helfen sollen, die das E-Book Modulare Spielarchitektur in Unity mit ScriptableObjects erstellen begleitet.

Die Demo ist inspiriert von klassischen Ball- und Paddle-Arcade-Spielmechaniken und zeigt, wie ScriptableObjects Ihnen helfen können, Komponenten zu erstellen, die testbar, skalierbar und designerfreundlich sind.

Zusammen bieten das E-Book, das Demoprojekt und diese Mini-Guides bewährte Praktiken für die Verwendung von Programmierdesignmustern mit der ScriptableObject-Klasse in Ihrem Unity-Projekt. Diese Tipps können Ihnen helfen, Ihren Code zu vereinfachen, den Speicherverbrauch zu reduzieren und die Wiederverwendbarkeit des Codes zu fördern.

Diese Reihe umfasst die folgenden Artikel:

  • Beginnen Sie mit der Unity ScriptableObjects-Demo
  • Trennen Sie Spieldaten und Logik mit ScriptableObjects
  • Verwenden Sie ScriptableObjects als Delegatobjekte
  • Verwenden Sie ScriptableObjects als Ereigniskanäle im Spielcode
  • Wie man ein ScriptableObject-basiertes Laufzeit-Set verwendet
  • Wichtiger Hinweis, bevor Sie beginnen
  • Erweiterbare Enums
  • ScriptableObject-basierte Enums
  • Spieler-ID in PaddleBallSO
  • Muster-Demo
  • Verhalten erweitern
  • Vorteile von ScriptableObject-basierten Enums
  • Weitere ScriptableObject-Ressourcen

Wichtiger Hinweis, bevor Sie beginnen

Bevor Sie in das ScriptableObject-Demo-Projekt und diese Reihe von Mini-Anleitungen eintauchen, denken Sie daran, dass Designmuster im Kern nur Ideen sind. Sie sind nicht auf jede Situation anwendbar. Diese Techniken können Ihnen helfen, neue Wege zu finden, um mit Unity und ScriptableObjects zu arbeiten.

Jedes Muster hat Vor- und Nachteile. Wählen Sie nur die aus, die Ihrem spezifischen Projekt sinnvoll zugutekommen. Verlassen sich Ihre Designer stark auf den Unity Editor? Ein auf ScriptableObject basierendes Muster könnte eine gute Wahl sein, um ihnen die Zusammenarbeit mit Ihren Entwicklern zu erleichtern.

Letztendlich ist die beste Code-Architektur die, die zu Ihrem Projekt und Ihrem Team passt.

Tab 1
DAS LÖSCHEN ODER NEUORDNEN VON ENUM-WERTEN KANN ZU UNERWARTETEM VERHALTEN FÜHREN.

Erweiterbare Enums

Enums sind eine praktische Möglichkeit, eine feste Menge benannter Werte in Ihrem Code zu verwalten. Sie haben jedoch einige Einschränkungen. Da serialisierte Enum-Werte als Ganzzahlen und nicht als ihre symbolischen Namen gespeichert werden, kann das Entfernen oder Neuordnen eines Wertes zu falschem oder unerwartetem Verhalten führen. Das bedeutet, dass Enums, insbesondere wenn Sie viele davon haben, Kopfschmerzen bei der Unity-Entwicklung verursachen können.

Der Standardansatz

So sieht ein typisches Enum aus:

[System.Serializable]
public enum HandGestures
{
Felsen,
Papier,
Schere
}

Sie können ein Enum mit dem System.Serializable Attribut serialisieren, und es erscheint im Inspector.

Das Problem

Das Neuanordnen oder Löschen eines Wertes kann Probleme verursachen. Da jeder Wert intern eine Ganzzahl ist, kann das, was er darstellt, etwas anderes werden. Im gegebenen Beispiel würde das Löschen des Papierwerts dazu führen, dass die Schere den Wert 1 annimmt.

Oder, wenn wir einen Wert hinzufügen, wie im folgenden Beispiel.

Der ausgewählte Enum-Wert würde sich ändern, wenn er nach dem gelöschten Eintrag kommt.

Dies kann Probleme beim Warten und Aktualisieren von Projekten verursachen, insbesondere wenn Ihr Enum zahlreiche Werte enthält. Sie können dieses Problem mildern, indem Sie ein leeres oder ungenutztes Element lassen oder indem Sie die Ganzzahlen explizit festlegen. Allerdings ist keine der Lösungen ideal.

Download PaddleBallSO
tab3
ÜBERPRÜFUNG DER GLEICHHEIT ZWISCHEN SCRIPTABLEOBJECTS

ScriptableObject-basierte Enums

Auf ScriptableObject basierende Enums bieten Ihnen die Funktionalität traditioneller Enums, werden jedoch als einzelne Assets gespeichert. Zum Beispiel, schauen Sie sich das PlayerIDSO ScriptableObject im PaddleBallSO Projekt im folgenden Beispiel an.

Im Wesentlichen ist dies ein leeres ScriptableObject.

Sie können das verwenden, um eine Reihe von ScriptableObject-Assets im Projekt zu erstellen, wie P1, P2 usw. Selbst wenn sie keine Daten enthalten, können Sie ScriptableObjects zum Vergleich verwenden. Erstellen Sie einfach ein neues ScriptableObject-Asset im Projekt und geben Sie ihm einen Namen.

Sie können so viele Spieler-IDs erstellen, wie Sie im Projekt benötigen, und einfach zwischen ihnen wechseln. Ändern Sie einfach das zugewiesene Asset im GameDataSO-Skript.

Wenn Sie auf Gleichheit prüfen, funktioniert dies ähnlich wie ein Enum. Beziehen sich zwei Variablen auf dasselbe ScriptableObject? Wenn ja, sind sie vom gleichen Elementtyp. Andernfalls sind sie es nicht.

Selbst ohne zusätzliche Daten repräsentiert das ScriptableObject eine Kategorie oder einen Elementtyp.

Spieler-ID in PaddleBallSO

In PaddleBallSO wird der PlayerIDSO zu einer Teambezeichnung. Wir verwenden die P1- und P2-Assets im GameDataSO, um zwischen den beiden Schlägern zu unterscheiden.

Das GameSetup-Skript weist jedem Schläger eine Spieler-ID zu. Während des Spiels vergleichen die Paddle-Skripte die Spieler-Eingaben mit der zugewiesenen Team-ID.

Dies hat Anwendungen für jede Art von Multiplayer-Spiel. Alternativ sollten Sie in Betracht ziehen, sie überall dort zu verwenden, wo Sie auf ein Enum zugreifen.

Da sie einfach Zuweisungen im Inspector sind, unterliegen ScriptableObjects nicht den gleichen Problemen mit Umbenennung und Neuanordnung.

Möchten Sie die Bezeichnernamen in "Player1" oder "Player2" ändern? Das können Sie tun, und alles funktioniert weiterhin. Weitere ScriptableObjects hinzufügen? Kein Problem – die Asset-Zuweisung im Inspector bleibt gleich.

tab5
BLOCKIERT DIE VERWENDUNG ZUGEWIESENER TEAMS FÜR VERGLEICHE.

Muster-Demo

Dieses Verhalten ist nützlich für die Erstellung von Gameplay. Klicken Sie in der Patterns-Demo auf die Schaltfläche Enum wechseln, um die Teams zu ändern. Ein MonoBehaviour auf dem DemoBall aktualisiert den SpriteRenderer entsprechend.

Verursacht der Ball Schaden an einem Block, wenn er kollidiert? Finde es heraus, indem du einen schnellen Gleichheitstest durchführst. Hier ist eine Möglichkeit, sie im folgenden Codebeispiel zu vergleichen.

Diese Methode kann bestimmen, ob zwei GameObjects im selben Team sind, was nützlich ist, wenn man freundliche und feindliche Interaktionen überprüft. Dieser einfache Vergleich kann auf Item-Aufnahmen, Schaden oder alles andere angewendet werden, das ein "Team" oder "Ausrichtung" hat.

Download PaddleBallSO

Verhalten erweitern

Der spaßige Teil passiert, wenn du Logik zu deinen ScriptableObjects hinzufügst. Im Gegensatz zu einem herkömmlichen Enum kann ein ScriptableObject Felder und Methoden haben, zusätzlich zu den gespeicherten Daten.

Verwende diese, damit jedes ScriptableObject spezialisierte Vergleichslogik haben kann. Zum Beispiel könntest du ein ScriptableObject haben, das spezielle Schadenswirkungen definiert (z.B. Kälte, Hitze, elektrisch, magisch usw.).

Wenn deine Anwendung ein Inventarsystem benötigt, um Gameplay-Items auszurüsten, können ScriptableObjects die Itemtypen oder Waffenslots darstellen. Dürfen bestimmte Charaktere bestimmte Items nicht halten? Sind einige Items magisch oder haben spezielle Fähigkeiten? Auf ScriptableObject basierende Enums können Methoden hinzufügen, um das zu überprüfen.

Das MonoBehaviour DemoBall im vorherigen Beispiel enthält die AreEqual Methode, um ScriptableObjects zu vergleichen. Beim Erweitern des Verhaltens kannst du die Vergleichslogik im ScriptableObject selbst bündeln.

Im Patterns-Demo könntest du den Ball so modifizieren, dass er wählerischer ist, wenn er mit einem Objekt kollidiert. Sieh dir ein allgemeines Item für Kollision im folgenden Codebeispiel an.

Dies könnte ähnliche Ergebnisse wie die aktuelle Demo erzielen, hat aber jetzt ein m_Weakness Feld. Dies ermöglicht es jedem ScriptableObject, ein anderes ScriptableObject zu definieren, das bei einer Kollision zerstört werden soll.

Anstatt die AreEqual Methode aufzurufen, verwaltet jedes ScriptableObject einfach seine eigene Vergleichslogik.

Das Ergebnis ist flexibler und erweiterbar. Anstatt den Ball einen Block eines anderen Teams zerstören zu lassen, können Sie spezifisch sein. Mehrere Bälle in der Szene könnten unterschiedliche Blöcke zerstören, abhängig von ihren individuellen CollisionItems.

Dies bereitet den Boden für unterschiedliche, komplexere Interaktionen. Wenn Sie ein Stein-Schere-Papier-System erstellen möchten, könnten Sie drei ScriptableObjects definieren: Stein, Papier und Schere. Jedes könnte seine eigene einzigartige m_Weakness haben und die IsWinner Methode verwenden, um die Interaktionen zu handhaben.

Im Gegensatz zu Enums machen ScriptableObjects diesen Prozess modular und anpassungsfähig. Es ist nicht notwendig, sich auf zusätzliche Datenstrukturen zu verlassen oder zusätzliche Logik hinzuzufügen, um mit einem separaten Datensatz zu synchronisieren. Fügen Sie einfach ein zusätzliches Feld und/oder eine Methode hinzu, um die Logik zu handhaben.

Vorteile von ScriptableObject-basierten Enums

Sobald Sie mit ScriptableObject-basierten Enums vertraut sind, werden Sie feststellen, dass sie Ihren Arbeitsablauf verbessern können, insbesondere bei der Zusammenarbeit mit Teamkollegen. Da sie Assets sind, führt das Aktualisieren zu weniger Merge-Konflikten, was das Risiko von Datenverlust verringert.

Das Hinzufügen neuer ScriptableObject-basierter Enums ist genau wie das Erstellen eines weiteren Assets. Im Gegensatz zu traditionellen Enums wird das Hinzufügen neuer Werte Ihren bestehenden Code nicht brechen. Außerdem hat Unity bereits integrierte Werkzeuge, um sie zu durchsuchen, zu filtern und zu organisieren, genau wie jedes andere Asset.

Als Bonus ermöglicht die Drag-and-Drop-Benutzeroberfläche des Editors Ihren Designern, Spieldaten ohne zusätzliche Unterstützung von einem Softwareentwickler zu erweitern. Sie müssen immer noch koordinieren, wie die Felder zunächst eingerichtet werden, aber die Designer können diese Felder dann selbstständig mit Daten füllen.

Download PaddleBallSO
scriptable outro

Weitere ScriptableObject-Ressourcen

ScriptableObject-basierte Enums sind eine weitere Ressource, die Ihr Team nutzen kann, um die Zusammenarbeit und Effizienz zu verbessern.

Erfahren Sie mehr über Entwurfsmuster mit ScriptableObjects in unserem technischen E-Book Create modular game architecture in Unity with ScriptableObjects. Sie können auch mehr über gängige Entwurfsmuster in der Unity-Entwicklung in Level up your code with game programming patterns erfahren.