Redgate Hub

Angenommen, Sie erstellen ein Rollenspiel und benötigen eine einfachere Möglichkeit, verschiedenen Elementen Statistiken, Eigenschaften und vieles mehr zuzuweisen. Während Sie Unity Prefabs verwenden könnten, um dies zu tun und dann die Werte jeder einzelnen Kopie des Prefabs zu ändern, ist dies ein unbequemer Weg, um die Aufgabe zu erledigen. Für den Anfang verbraucht diese Methode mehr Speicher, was Sie möglicherweise sparen müssen, wenn Sie ein großes Spiel erstellen möchten. Wenn Sie außerdem Änderungen an den Objekten im Spiel vornehmen müssen, ist dies einfach nicht so effizient, wenn mehrere Kopien von Fertighäusern herumliegen. Dies wird insbesondere dann zum Problem, wenn Sie ein größeres Team haben, mit dem Sie arbeiten müssen, sodass Sie die Änderung für andere Teammitglieder vereinfachen möchten. Selbst wenn Sie nicht in einem Team sind, wäre diese Methode nur schwieriger für Sie, wenn Sie arbeiten.

Um die Dinge in einer solchen Situation einfacher zu machen, stehen Ihnen skriptfähige Objekte zur Verfügung. Und was sind skriptfähige Objekte? Einfach gesagt, sie sind Datencontainer. Der Unity-Entwickler erstellt eine grundlegende Vorlage für diese Container, die definiert, welche Informationen jedes Objekt enthalten soll. Dann werden die skriptfähigen Objekte aus dieser Vorlage erstellt, die dann von Unity-Spielobjekten verwendet werden. Im obigen Beispiel kann ein einzelnes skriptfähiges Objekt verwendet werden, um die verschiedenen Eigenschaften eines Elements zu definieren. Dann wird dieses skriptfähige Objekt von allen Kopien des Elements referenziert. Wenn Sie zuvor die Statistiken eines Elements ändern möchten, müssen Sie die Werte jeder einzelnen Kopie des Elements ändern. Mit skriptfähigen Objekten müssen Sie jetzt nur noch ein Objekt (das skriptfähige Objekt) ändern, und alle Objekte, die Daten von diesem skriptfähigen Objekt erhalten, ändern sich gleichzeitig.

Es ist immer hilfreich, diese Dinge in Aktion zu sehen, ein neues Projekt zu erstellen. Dieses Projekt zeigt skriptfähige Objekte und wie sie Ihnen helfen können. Das Projekt besteht aus drei Spielobjekten, die drei Charaktere darstellen sollen. Jedes Zeichen erbt einige Werte von einem skriptfähigen Objekt. Diese Werte sind maximale Gesundheit, Angriff, Verteidigung, Geschwindigkeit und ein Name und eine Farbe für den Charakter. Eine einfache Benutzeroberfläche zeigt diese Werte an, sodass Sie die Ergebnisse der Anwendung skriptfähiger Objekte leicht sehen können. Nun, da Sie ein Endziel haben, ist es Zeit zu beginnen.

Projekteinrichtung

Wenn Sie diese Ideen in einem neuen Projekt implementieren, öffnen Sie die Unity Hub-Anwendung und erstellen Sie ein neues Projekt, wie in Abbildung 1 gezeigt.

Abbildung 1: Neues Projekt anlegen

Geben Sie im nächsten Fenster dem Projekt einen beliebigen Namen und legen Sie den Dateipfad fest. Während Sie dieses Projekt in einer beliebigen Vorlage ausführen können, wird in diesem Beispiel die 3D-Projektvorlage wie in Abbildung 2 gezeigt verwendet. Es wird empfohlen, diese Vorlage zu verwenden, wenn Sie folgen möchten.

Abbildung 2: Festlegen des Projektnamens, -typs und -speicherorts

Sobald das Projekt erstellt wurde, möchten Sie sich organisieren. In Ihrem Assets-Fenster müssen Sie drei Ordner erstellen, indem Sie mit der rechten Maustaste auf das Fenster klicken und wie in Abbildung 3 gezeigt zum Ordner Create -> navigieren Benennen Sie die Ordner Materials, Scriptable Objects und Scripts.

Abbildung 3: Erstellen eines neuen Ordners

Während Sie hier sind, ist es eine gute Idee, drei Materialien herzustellen. Diese Materialien werden verwendet, um die Farben verschiedener Objekte nach dem vom skriptfähigen Objekt angegebenen Material zu ändern. Um diese Materialien zu erstellen, navigieren Sie zum Ordner Materialien und klicken Sie erneut mit der rechten Maustaste. Bei der Benennung des Materials wird empfohlen, ihm einen Namen zu geben, der mit seiner Farbe korreliert. Zum Beispiel kann dieses erste Material Rot genannt werden. Um diese Farbe festzulegen, müssen Sie das neu erstellte Material auswählen und zum Inspektorfenster navigieren. Im Albedo-Feld gibt es eine Farbauswahl in Abbildung 4 können Sie klicken, um die, nun, Farbauswahl zu öffnen.

Abbildung 4: Öffnen des Farbwählers

Die Farbe wird entweder durch Verschieben des kleinen Kreises im Farbwähler oder durch direkte Eingabe der RGB-Werte in der unteren Hälfte des Farbwählfensters geändert. Im obigen Beispiel wären die RGB-Werte 255, 0, 0. Danach sollten Sie zwei weitere Materialien erstellen und deren Farben zuweisen. In diesem Beispiel werden Grün und Blau verwendet, es kann sich jedoch um eine beliebige Farbe handeln.

Jetzt ist es an der Zeit, die eigentliche Szene zu erstellen, in der dieses Spiel stattfindet. Es besteht aus zwei Hauptteilen – es gibt die Benutzeroberfläche, die die Statistiken für verschiedene skriptfähige Objekte anzeigt, und die drei Kapseln, die Zeichen darstellen. Die „Charaktere“ sind der einfachste Teil, also kannst du dort anfangen. Alles, was Sie tun müssen, ist zum Hierarchiefenster zu gehen, auf die Schaltfläche Erstellen zu klicken und 3D-Objekt -> zu wählen, wie in Abbildung 5 gezeigt. Tun Sie dies dreimal oder kopieren Sie das erste Objekt, und Sie können ihnen auch Namen geben, wenn Sie möchten. In diesem Beispiel erhalten die Kapseln die Namen Char1, Char2, Char3.

Abbildung 5: Erstellen eines Kapselobjekts

Sie müssen ihre Positionen ändern, damit sie sich nicht überlappen. Um die Position des Objekts zu ändern, wählen Sie eines in der Hierarchie aus und navigieren zur Transformationskomponente im Inspektor. Ändern Sie dann die x-, y- und z-Positionierungsfelder, um die Objekte an die gewünschte Stelle zu verschieben.

Abbildung 6: Bearbeiten der Position des Objekts

Tabelle 1 zeigt die genauen Positionen aller drei Kapseln in diesem Beispiel.

Tabelle 1: Alle Objekte und ihre Positionen in der Welt

Objekt

X-Position

Y-Position

Z-Position

Char1

Char2

Char3

Natürlich können Sie jede dieser Zahlen anpassen, wenn Sie möchten. Als nächstes folgt die Benutzeroberfläche, die die Werte für skriptfähige Objekte anzeigt. Um zu beginnen, müssen Sie auf die Schaltfläche Erstellen der Hierarchie klicken, diesmal jedoch UI -> Canvas . Klicken Sie dann bei ausgewähltem neuen Canvas-Objekt erneut auf die Schaltfläche Erstellen und diesmal auf Leeres untergeordnetes Element erstellen. Schließlich klicken Sie noch einmal auf die Schaltfläche Erstellen und wählen diesmal UI -> Text. Ziehen Sie das neu erstellte Textobjekt auf das leere Spielobjekt und duplizieren Sie den Text viermal mit Strg + D, sodass sich unter GameObject insgesamt fünf Textobjekte befinden. Sobald Sie fertig sind, sollte Ihre Hierarchie wie in Abbildung 7 aussehen.

Abbildung 7: Die aktuelle Hierarchie

Jedes Textobjekt korreliert mit dem Namen und den Statistiken, die über ein skriptfähiges Objekt angegeben werden. Es ist hilfreich, die Textobjektnamen in den Wert zu ändern, den sie darstellen. Das erste Textobjekt kann also name_text und das zweite attack_text und so weiter. Darüber hinaus müssen Sie den Standardtext ändern, um das Erscheinungsbild der Benutzeroberfläche visuell darzustellen. Dies geschieht, indem Sie im Inspektor zur Textkomponente navigieren und den Textwert ändern. Und schließlich passen Sie ihre Positionen so an, dass sie nicht alle übereinander gestapelt sind. Um dies zu vereinfachen, zeigt Tabelle 2 alle verschiedenen Objektnamen und deren jeweilige Werte.

Tabelle 2: Alle Textobjekte und ihre Standardwerte für Text und Positionierung

Benennen Sie GameObject (unter Canvas) in etwas Beschreibenderes um, z. B. Char1Description , und duplizieren Sie dann das übergeordnete Objekt. Benennen Sie die beiden Duplikate in Char2Description und Char3Description um und positionieren Sie die drei Objekte so, dass sie sich über den Kapselobjekten befinden. Dieses Beispiel platziert Char1Description an einer X-Position von -300, Char2Descrption bei 0 und Char3Position bei 250. Alle Y- und Z-Positionswerte bleiben bei 0.

Es war ein langer Weg, aber die Projekteinrichtung ist abgeschlossen! Jetzt ist es an der Zeit zu programmieren und zu sehen, wie skriptfähige Objekte in Bezug auf die Programmierung erstellt werden. Navigieren Sie in Ihrem Assets-Fenster zum Ordner Scripts und erstellen Sie zwei neue Scripts, indem Sie mit der rechten Maustaste klicken und zu Create -> C# Script navigieren. Diese Skripte sollten CharStats und LoadStats heißen. Doppelklicken Sie also auf dieses Skript, um Visual Studio zu öffnen und mit dem Codierungsprozess zu beginnen.

CharStats Script

Um ein skriptfähiges Objekt zu erstellen, müssen Sie zuerst das Create -Menü hinzufügen, das Sie zum Erstellen von Materialien und Skripten verwendet haben. Dazu verwenden Sie das Attribut CreateAssetMenu und geben den Standarddateinamen und den Speicherort im Menü an. Außerdem müssen Sie ändern, von welcher Klasse CharStats erbt. Standardmäßig erbt jede C # -Klasse in einem Unity-Projekt von MonoBehaviour, aber dieses Skript muss stattdessen von ScriptableObject erben.

Beachten Sie beim Setzen von menuName, dass ein Schrägstrich verwendet wird, der die Verwendung von Untermenüs anzeigt. Wenn Sie möchten, können Sie den Schrägstrich entfernen und nur die Option Spielereinheiten verwenden, ohne weiter durch das Menü Erstellen navigieren zu müssen. In diesem Fall wurde das Untermenü hauptsächlich hinzugefügt, um zu zeigen, dass Sie Ihre skriptfähigen Objekte nach Ihren Wünschen organisieren können. In diesem Fall lautet das Menü Erstellen -> Charaktererstellung -> Spielereinheiten. Wenn Sie möchten, können Sie das Objekt in einem anderen skriptfähigen Objekt aus demselben Pfad erstellen lassen, jedoch mit einer anderen Erstellungsoption, z. B. Item .

Da es sich um ein skriptfähiges Objekt handelt, sind die Standardmethoden Start und Update nicht erforderlich, sodass Sie diese löschen können. Der Hauptzweck dieses Objekts besteht darin, Daten zu speichern, die einem anderen Objekt übergeben werden, aber es werden auch zwei benutzerdefinierte Methoden erstellt, um zu demonstrieren, wie skriptfähige Objekte mehr als nur Daten speichern können. Apropos Daten: Der Code zum Definieren der Daten, die dieses Objekt enthält, lautet folgendermaßen:

1
2
3
4
5
6

public string charName;
public int Angriff;
public int Verteidigung;
public int Geschwindigkeit;
öffentliche int maxHealth;
öffentliche Material newColor;

Wie bereits erwähnt, enthält jedes skriptfähige Objekt einen Namen und einige Werte für vier verschiedene Statistiken. Es enthält auch Informationen für die neue Farbe des Charakters, sobald das skriptfähige Objekt angewendet wird. Die Werte für jeden werden im Unity-Editor definiert und unterscheiden sich natürlich für jedes erstellte Objekt.

Die beiden Methoden sind einfach gehalten. Man druckt einfach eine Nachricht an die Debug-Konsole, dass das Zeichen geladen wurde. Diese Meldung wird in der Methode Start des Skripts LoadStats gedruckt.

1
2
3
4

public void PrintMessage()
{
Debuggen.Log(„Das Zeichen “ + charName + “ wurde geladen.“);
}

RandomizeStats, die zweite Methode macht genau das, was der Name schon sagt. Es ändert die Werte des skriptfähigen Objekts in eine Zufallszahl zwischen 1 und 20. Später programmieren Sie das Projekt, um die Benutzeroberfläche automatisch mit den neuen Werten zu aktualisieren. Aber das ist nicht einmal der interessanteste Teil! Daten in einem skriptfähigen Objekt sind persistent, was bedeutet, dass sie für die Sitzung bis zum Schließen des Spiels gleich bleiben. Dies ist besonders hilfreich, wenn Sie ein Spiel erstellen, das aus mehreren Szenen besteht, da normalerweise alte Objekte gelöscht und neue beim Öffnen einer neuen Szene neu geladen werden. Skriptfähige Objektdaten bleiben jedoch beim Übergang zwischen Szenen unberührt. Darüber hinaus bleiben die Daten während der Arbeit im Unity-Editor unverändert, bis der Editor selbst geschlossen wird. Dies bedeutet, dass Änderungen an den Daten in skriptfähigen Objekten während der Ausführung des Spiels aus dem Editor vorhanden sind, wenn Sie das Spiel erneut aus dem Editor heraus spielen, sofern keine Änderungen an den Daten selbst vorgenommen werden.

Das ist alles, was es zum CharStats-Skript gibt. Es mag ziemlich einfach erscheinen, aber das Projekt ist noch nicht abgeschlossen. Sie haben die Möglichkeit programmiert, skriptfähige Objekte mit eigenen Methoden und Daten zu erstellen, aber Ihre Capsule-Charaktere wissen nichts über diese Objekte. Soweit es sie betrifft, existieren die skriptfähigen Objekte nicht. Um dies zu beheben, müssen Sie das LoadStats-Skript öffnen und codieren, damit die Objekte die Daten eines skriptfähigen Objekts verwenden können, um die Benutzeroberfläche zu aktualisieren und ihre Farbe zu ändern. Der Code sollte ähnlich wie in Abbildung 8 aussehen.

Abbildung 8: Vollständiges CharStats-Skript

LoadStats-Skript

Machen Sie sich keine Sorgen darüber, wo die Klasse geändert wird, die dieses Skript erbt. Der Standardwert MonoBehaviour ist genau das, was benötigt wird. Fügen Sie stattdessen oben eine neue using-Anweisung hinzu.

1
mit UnityEngine.UI;

Einschließlich dieser ermöglicht es Ihnen, den Text von der Benutzeroberfläche zu erhalten und zu aktualisieren, um die Werte in den skriptfähigen Objekten gefunden anzuzeigen. Nun zur Klasse selbst, beginnend mit Variablen.

1
2
3
4
5
6
7
8

// scriptable object
public CharStats charStat;
public Text nameText;
public Text attackText;
public Text defenseText;
public Text speedText;
public Text maxHealthText;
public MeshRenderer currentColor;

Wie im Kommentar erwähnt, ist die Variable charStat das verwendete skriptfähige Objekt. Sie können hier sehen, dass sich das Abrufen dieser skriptfähigen Objekte nicht von der Deklaration einer anderen Variablen unterscheidet. Später im Skript erhalten Sie die Variablen und Methoden innerhalb des Objekts und verwenden sie in diesem Skript. Tatsächlich wird die PrintMessage -Methode in CharStats derzeit in der LoadStats Start -Methode verwendet.

1
2
3
4
5

ungültiger Start()
{
DisplayStats();
charStat.PrintMessage();
}

Wie bei jedem anderen externen Skript müssen Sie nur charStat gefolgt von PrintMessage aufrufen, um die in diesem skriptfähigen Objekt gefundene Methode abzurufen. Dies kann sich als besonders nützlich erweisen, wenn Sie Objekte haben, die alle ähnliche oder identische Verhaltensweisen aufweisen. In diesem Fall kann es für den Entwickler auch nützlich sein, wie in diesem Beispiel Nachrichten an die Debug-Konsole zu drucken. Wenn etwas schief gehen sollte und Sie vermuten, dass das skriptfähige Objekt einen Fehler aufweist, können Sie die Debug-Konsolennachrichten verwenden, um das Problem zu finden.

Im Moment gibt es einen Fehler, der besagt, dass DisplayStats nicht existiert. Um dies zu beheben, navigieren Sie unter der Methode Update und fügen Sie diesen Code hinzu.

Hier werden die im skriptfähigen Objekt gespeicherten Werte abgespielt. All diese zuvor deklarierten Textvariablen? Sie erhalten Daten zur Anzeige, sodass die Fragezeichen, die Sie im Editor gesetzt haben, jetzt einen Wert anzeigen. Obwohl es sich nicht wirklich um eine Statistik handelt, wird die Farbe des Zeichens hier geändert, indem currentColor.material aufgerufen und auf das im skriptfähigen Objekt festgelegte Material gesetzt wird.

Die zweite charStats -Methode, RandomizeStats, wurde noch nicht verwendet, daher sollten Sie einen Platz dafür finden. In der Update -Methode prüft das Programm, ob die Leertaste gedrückt wurde. Wenn dies der Fall ist, ruft es RandomizeStats auf und gibt dem skriptfähigen Objekt einige neue Werte. Dann wird DisplayStat erneut aufgerufen und die neuen Werte werden angezeigt.

1
2
3
4
5
6
7
8

leere Aktualisierung()
{
wenn (Eingabe.GetKeyDown(Schlüsselcode.Raum))
{
In: charStat.RandomizeStats();
Anzeigestaten();
}
}

Dies schließt das Skript LoadStats ab und beendet damit den Codierungsteil dieses Projekts. Der Code sollte ähnlich wie in Abbildung 9 aussehen. Jetzt müssen Sie nur noch ein paar skriptfähige Objekte erstellen, diese mit LoadStats auf das Capsule-Objekt anwenden und diese neue Funktionalität ausprobieren. Speichern Sie Ihre Arbeit natürlich, bevor Sie zum Unity-Editor zurückkehren.

Abbildung 9: LoadStats-Skript abschließen

Projekt abschließen

Um skriptfähige Objekte zu verwenden, müssen Sie diese zuerst erstellen. Klicken Sie im Fenster Assets im Ordner Skriptfähige Objekte mit der rechten Maustaste und navigieren Sie zu Erstellen -> Charaktererstellung -> Spielereinheiten, wie in Abbildung 10 gezeigt.

Abbildung 10: Erstellen einer neuen Spielereinheit, eines skriptfähigen Objekts

Sie können das Objekt beliebig benennen. Das Beispiel basiert diese Objekte aus traditionellen Rollenspiel-Klassen, so wird es einen Krieger, Jäger und Magier haben. Wählen Sie das neue Objekt aus, navigieren Sie zum Inspektorfenster und geben Sie den verschiedenen Feldern Werte. Um das neue Farbfeld auszufüllen, navigieren Sie einfach zu Ihrem Materialordner, klicken und ziehen Sie das gewünschte Material wie in Abbildung 11 gezeigt in das Feld.

Abbildung 11: Festlegen des neuen Farbmaterials des Objekts

Erstellen Sie zwei weitere skriptfähige Objekte und machen Sie dasselbe wie zuvor, indem Sie ihnen unterschiedliche Werte für die verschiedenen Felder geben. Gehen Sie anschließend zum Hierarchiefenster und wählen Sie eines der char-Objekte aus. Geben Sie ihnen dann das LoadStats-Skript als Komponente, indem Sie im Assets-Fenster zum Ordner Scripts navigieren, LoadStats suchen und es wie in Abbildung 12 gezeigt in das Inspektorfenster ziehen.

Abbildung 12: Anhängen des LoadStats-Skripts an ein Objekt

Als nächstes müssen Sie die LoadStats-Felder ausfüllen. Suchen Sie zunächst ein skriptfähiges Objekt, das Sie für Ihr erstes „Zeichen“ verwenden möchten, und wenden Sie es wie in Abbildung 13 gezeigt auf das Feld Char Stat an. Denken Sie daran, dass skriptfähige Objekte im Fenster Assets unter Skriptfähige Objekte gefunden werden.

Abbildung 13: Einstellung, wo das skriptfähige Objekt Char1 Daten abrufen soll

Füllen Sie nun die Textfelder aus. In der Hierarchie erweitern Sie die Zeichenfläche, gefolgt von der Erweiterung des Zeichenbeschreibungsobjekts, das mit dem Objekt korreliert, das Sie gerade bearbeiten. Wenn Sie beispielsweise Char1 bearbeiten, möchten Sie Char1Description erweitern. Nehmen Sie dann die Textobjekte, die sich unter dem übergeordneten Objekt befinden, und wenden Sie sie auf die entsprechenden Felder an, wie in Abbildung 14 gezeigt.

Abbildung 14: Festlegen aller Textfelder

Sobald die Textfelder ausgefüllt sind, müssen Sie nur noch den Mesh-Renderer des Objekts aufrufen, damit Sie Zugriff auf das Material haben und so die Farbänderung ermöglichen. Alles, was Sie tun müssen, ist auf die Mesh-Renderer-Komponente im Inspektorfenster zu klicken und sie in das aktuelle Farbfeld zu ziehen, wie in Abbildung 15 gezeigt.

Abbildung 15: Festlegen des aktuellen Farbfelds

Wiederholen Sie die vorherigen Schritte für die beiden anderen Zeichenobjekte, und Sie haben das Projekt abgeschlossen. Wenn Sie fertig sind, klicken Sie oben im Editor auf die Wiedergabetaste und beobachten Sie, wie drei nahezu identische Objekte sehr unterschiedliche Werte haben. Wenn aus irgendeinem Grund etwas nicht richtig aussieht, sollten Sie zuerst Ihre skriptfähigen Objekte überprüfen und sicherstellen, dass die angezeigten Werte und Farben den gewünschten entsprechen. Denken Sie daran, auch das neue Farbfeld zu überprüfen.

Alle diese Zahlen und ihre Farben stammen von skriptfähigen Objekten, die selbst aus einer einzigen Vorlage stammen. Sie können auch noch skriptfähigere Objekte erstellen und diese in das Char Stat-Feld in der Load Stats-Komponente eines Objekts einfügen und einen ganz anderen Charakter haben. Während Sie das Spiel ausführen (Abbildung 16), sollten Sie in der Debug-Konsole in der unteren linken Ecke eine Meldung sehen, dass ein Charakter geladen wurde. Es gibt zwei weitere Meldungen, aber Sie können nur die eine Meldung sehen, ohne die vollständige Debug-Konsole zu öffnen, die unter Window -> General -> Console . Sie können auch die Leertaste drücken, um einige völlig neue Statistiken für Ihre Charaktere zu erhalten. Wenn Sie das Spiel stoppen und dann erneut ausführen, werden Sie feststellen, dass die zufällig generierten Werte bestehen bleiben, was die Persistenz skriptfähiger Objekte demonstriert. Sie kehren zu ihren ursprünglichen Werten zurück, indem Sie die Werte entweder manuell in die Objekte eingeben oder den Editor schließen und erneut öffnen.

Abbildung 16: Skriptfähige Objekte in Aktion

Fazit

Natürlich können Sie für viele Objekttypen mehrere Typen von skriptfähigen Objekten erstellen. Dieses Beispiel demonstrierte ihre Verwendung über Zeichenklassen, aber es gibt auch das oben erwähnte items-Beispiel. Es kann sogar für viel kleinere Objekte verwendet werden, z. B. Power-Ups, die an Arcade-Spiele erinnern. Wenn Sie skriptfähige Objekte verwenden, erstellen Sie ein sauberes, einfaches System, in dem Sie Daten mit wenigen Tastenanschlägen ändern und laden und die Ergebnisse fast sofort sehen können. Die Verwendung skriptfähiger Objekte bedeutet auch, dass weniger Skripte erstellt werden müssen, da Sie eine Vorlage für mehrere Objekte verwenden können. Unabhängig davon, ob Ihr Projekt groß oder klein ist, ob Ihr Team viele Mitglieder hat oder nur Sie selbst, skriptfähige Objekte können die Entwicklung aller ein wenig erleichtern.

You might also like

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.