Grundlegendes zu Fertighäusern und Instanziierung

Das Instanziieren und Zerstören von Objekten wird während des Spiels als sehr wichtig angesehen. Instanziieren heißt einfach ins Leben rufen. Gegenstände erscheinen oder "erscheinen" im Spiel, Feinde sterben, GUI-Elemente verschwinden und Szenen werden die ganze Zeit im Spiel geladen. Noch wichtiger wird es, zu wissen, wie man nicht benötigte Objekte richtig entfernt und wie man diese einbringt.

Lassen Sie uns zuerst verstehen, was prefabssind. Fertighäuser werden als wichtig angesehen, um zu verstehen, wie Instanziierung in Unity funktioniert.

Prefabs sind wie blueprintseines GameObject. Fertighäuser sind in gewisser Weise acopyeines GameObjects, das dupliziert und in eine Szene eingefügt werden kann, auch wenn es zum Zeitpunkt der Erstellung der Szene nicht vorhanden war; Mit anderen Worten, Fertighäuser können verwendet werdendynamically generate GameObjects.

Um ein Fertighaus zu erstellen, müssen Sie lediglich das gewünschte GameObject aus Ihrer Szenenhierarchie in das Projekt ziehen Assets.

Um ein GameObject zu instanziieren, rufen wir das auf Instantiate()Methode in unserem Skript. Diese Methode, definiert inMonoBehaviour, nimmt ein GameObject als Parameter auf, damit es weiß, welches GameObject erstellt / dupliziert werden soll. Es gibt auch verschiedene Überschreibungen zum Ändern der Transformation des neu instanziierten Objekts sowie zur Elternschaft.

Versuchen wir, ein neues zu instanziieren hexagon wann immer die Space Taste gedrückt.

Erstellen Sie ein neues Skript mit dem Namen Instantiatorund öffne es. In demUpdate Methode, geben Sie den unten angegebenen Code ein.

Hier verwenden wir die GetKeyDown Methode der InputKlasse, um zu überprüfen, ob der Spieler während des letzten Frames eine bestimmte Taste gedrückt hat. Da wir möchten, dass es weiter überprüft wird, setzen wir es einUpdate, die 60 mal pro Sekunde läuft. Die GetKeyDown-Methode wird zurückgegebentrue wenn der von der KeyCode In diesem Frame wird enum (das alle möglichen Tasten einer Standardtastatur auflistet) gedrückt.

public class Instantiator : MonoBehaviour {
   public GameObject Hexagon;
   // Update is called once per frame
   void Update () {
      if (Input.GetKeyDown(KeyCode.Space)) {
         Instantiate(Hexagon);
      }
   }
}

Die öffentliche GameObject-Deklaration oben erstellt einen ähnlichen Slot wie den, den wir in unseren vorherigen Lektionen für Rigidbody2D erstellt haben. Dieser Slot akzeptiert nurprefabs (in Editorzeit) und gameObjects (zur Laufzeit) jedoch.

Speichern Sie das Skript und lassen Sie es kompilieren. Sobald dies erledigt ist, erstellen Sie eine neue,empty GameObject, indem Sie mit der rechten Maustaste auf das Menü Ihrer Objekthierarchie gehen und auswählen Create Empty.

Nennen Sie dieses Objekt etwas Erkennbares wie Instatiator Objectund hängen Sie unser neu erstelltes Skript daran an. Ziehen Sie in den für das GameObject angezeigten Slot das von uns erstellte Fertighaus.

Wenn wir das Spiel jetzt ausführen, wird durch Drücken der Leertaste ein neues Hexagon-Objekt erstellt, das mit dem Objekt identisch ist, mit dem wir das Fertighaus erstellt haben. Sie können sehen, dass jedes Sechseck in der Objekthierarchie erstellt wird. Der Grund, warum Sie sie nicht im Spiel sehen können, ist, dass sie vorerst alle erstellt werdenexactly übereinander.

In unserer nächsten Lektion werden wir das Konzept der Objektzerstörung verstehen.