Prefabs und Instantiate
Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 62 von 85.
Ein Prefab ist ein als Vorlage gespeichertes GameObject: Ziehe ein Objekt aus der Hierarchy in das Project-Fenster, und Unity speichert es mit all seinen Komponenten und Inspector-Werten. Das Prefab selbst befindet sich nicht in der Szene. Ein Skript erhält eines über ein Feld, wie jede andere Referenz auch: Deklariere public GameObject parcelPrefab; und ziehe das Prefab im Inspector auf dieses Feld.
Instantiate(prefab, position, rotation) erstellt eine Kopie des Prefabs in der Szene und gibt sie zurück. Diese Lieferdrohne lässt jedes Mal, wenn die Leertaste gedrückt wird, an ihrer eigenen Position ein Paket fallen. Quaternion.identity bedeutet keine Drehung:
public GameObject parcelPrefab;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(parcelPrefab, transform.position, Quaternion.identity);
}
}Jeder Tastendruck fügt der Hierarchy ein weiteres Objekt mit dem Namen Parcel(Clone) hinzu. Das Prefab bleibt unverändert, sodass jede Kopie mit denselben Werten beginnt. GetKeyDown ist hier wichtig: Mit GetKey würde das Gedrückthalten der Leertaste für eine halbe Sekunde etwa 30 Pakete fallen lassen, eines pro Frame.
Aufgabe
MittelLass bei jedem Klick eine Münze über der Spielfigur erscheinen.
- Füge das Feld
public GameObject coinPrefab;hinzu. Die Szene weist ihm das Coin-Prefab zu. - Rufe in
Update()beiInput.GetMouseButtonDown(0)Instantiate(coinPrefab, transform.position + new Vector3(0, 2, 0), Quaternion.identity);auf.
Drücke „Spielen“, bewege dich und klicke: Jedes Mal erscheint eine Münze über der Spielfigur. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
public class CoinDropper : MonoBehaviour
{
public float speed = 4f;
// coinPrefab: ein öffentliches GameObject-Feld, dem das Coin-Prefab zugewiesen ist
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
// Klick: Erzeuge eine Münze 2 Einheiten über dem Spieler
}
}
Alle Lektionen in Unity-Scripting: Grundlagen
1C#-Grundlagen in Unity
Hallo, UnityVariablenDezimalzahlen brauchen ein fText in der KonsoleVariablen, die sich etwas merkenIf und ElseZahlen vergleichenRückblick: Münzsammler7Schleifen und Methoden
Wiederholen mit forSchleifen in SchleifenEine Methode schreibenMethoden mit RückgabewertArraysRückblick: Treppe10Dinge finden
Nach Namen suchenTagsNach Typ suchenReferenzen schlagen SuchenUnitys NullRückblick: nächste Münze13Projekt: Weiche den Blöcken aus
Der LäuferBlöcke vom Himmel2Bring es in Bewegung
Platziere den WürfelBewege ihn in jedem FrameDrehe ihn jede SekundeSteuere mit den TastenRückblick: Fahre den Würfel5Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist eine StrukturRückblick: Drohnenpilot8GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter11Prefabs und Erzeugen von Instanzen
Prefabs und InstantiateNach Zeitintervall erzeugenIn einem Raster erzeugenListen von ObjektenDas Neueste zurücknehmenZerstörenZufälliges ErzeugenRückblick: Feuerwerk14Abschließende Herausforderungen
MünzmagnetDie Straße überquerenStraßenverkehrTurmbauerLanden oder verfehlen3Der Inspector
Inspector-FelderSerializeFieldFließkommazahlen und MathfInspector-AttributeRückblick: Aufzug6Transformationen und Hierarchie
Eltern und KinderHisse die FlaggeSkalierungDinge anschauenAuf einen Punkt zubewegenRückblick: Mond in Umlaufbahn9Projekt: Fang den Stern
Der FängerEin fallender Stern12Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle LoggerÜbe selbstständig: Unity-Playground