Prefabs und Instantiate
Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 48 von 67.
Ein Prefab ist ein GameObject, das als Vorlage gespeichert wurde: 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 an ihrer eigenen Position ein Paket fallen, wenn die Leertaste gedrückt wird. Quaternion.identity bedeutet keine Rotation:
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
MittelDie Pfeile bewegen den Spieler bereits. Lass bei jedem Klick eine Münze darüber erscheinen:
- Füge ein öffentliches Feld vom Typ
GameObjectmit dem NamencoinPrefabhinzu. Die Szene weist ihm das Coin-Prefab zu, sobald das Feld existiert. - Wenn die linke Maustaste geklickt wird, lass eine Kopie der Münze 2 Einheiten über dem Spieler und ohne Drehung erscheinen.
Drücke Play, bewege dich und klicke ein paar Mal, dann Check.
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
}
}
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen des Scripting in Unity
1Dein erstes Skript
Hallo, UnityPlatziere den WürfelBewege dich in jedem FrameDrehe dich jede SekundeSteuere mit den TastenRückblick: Steuere den Würfel4Vektoren
Vektoren addierenRichtungenLokaler und globaler RaumDiagonale GeschwindigkeitAbstand zwischen ObjektenVector3 ist ein StructRückblick: Drohnenpilot7Projekt: Fang den Stern
Der FängerEin fallender Stern10Der Lebenszyklus eines Skripts
Awake und StartUpdate und LateUpdateOnEnable und OnDisableDie Reihenfolge im LebenszyklusRückblick: Lifecycle Logger5Transformationen und Hierarchie
Eltern und KinderSkalierungDinge ansehenAuf einen Punkt zubewegenRückblick: Umlaufender Mond8Dinge finden
Nach Namen findenTagsNach Typ findenReferenzen schlagen FindUnitys NullRückblick: Nächste Münze11Projekt: Weiche den Blöcken aus
Der LäuferFallende Blöcke6GameObjects und Komponenten
Referenzen im InspectorEine Komponente abrufenFehlende KomponentenEine Komponente hinzufügenRequireComponentEin- und AusblendenRückblick: Lichtschalter9Prefabs und Spawnen
Prefabs und InstantiateNach Timer spawnenIn einem Raster spawnenObjektlistenZerstörenZufälliges SpawnenRückblick: Feuerwerk