Awake und Start
Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 55 von 67.
Unity ruft Awake() auf, sobald ein Objekt geladen wird, noch vor seinem Start(). Nützlich ist dabei die Regel für alle Objekte: Wenn eine Szene startet, wird das Awake() jedes Objekts ausgeführt, bevor das Start() irgendeines Objekts ausgeführt wird. Welches Objekt innerhalb jeder Runde zuerst an der Reihe ist, entscheidet Unity, und darauf kannst du dich nicht verlassen.
Dieses Player-Skript ist zwei Spielern zugewiesen, P1 (startLives 3) und P2 (startLives 5), und jeder hat den anderen als seinen rival:
public int startLives = 3;
public GameObject rival;
int lives;
void Awake()
{
lives = startLives; // dieses Objekt einrichten
}
void Start()
{
int theirs = rival.GetComponent<Player>().Lives(); // das andere abfragen
Debug.Log(name + " sees a rival with " + theirs + " lives");
}
public int Lives()
{
return lives;
}In der ersten Version wurde lives in Start() festgelegt. Der Spieler, dessen Start zuerst ausgeführt wurde, fragte dann seinen Rivalen, bevor dieser seine Leben festgelegt hatte, und gab 0 aus. Mit der Initialisierung in Awake() haben beide Spieler ihre Leben festgelegt, bevor Start() danach fragt. Daher gibt P1 5 und P2 3 aus. Daraus ergibt sich folgende Gewohnheit: Initialisiere die eigenen Felder eines Objekts in Awake() und kommuniziere mit anderen Objekten in Start().
Aufgabe
MittelZwei Bienenstöcke, HiveA und HiveB, verwenden dasselbe Hive-Skript. Jeder Bienenstock erzeugt seine Bienen (3 und 5, aus beeCount) und fügt sie einer Liste hinzu. Anschließend protokolliert er, wie viele Bienen sein Rivale hat: HiveA counts 5 rival bees und HiveB counts 3 rival bees.
Drücke Spielen: Einer der Bienenstöcke wird mit einer NullReferenceException angehalten, weil er die Liste seines Rivalen abfragt, bevor dieser sie erstellt hat. Korrigiere das Skript so, dass jeder Bienenstock seine Liste und seine Bienen hat, bevor ein Bienenstock die seines Rivalen zählt. Lass die Zählung an ihrer bisherigen Stelle. Klicke dann auf Prüfen.
Probier es selbst
using System.Collections.Generic;
using UnityEngine;
public class Hive : MonoBehaviour
{
public GameObject beePrefab;
public GameObject rival;
public int beeCount = 3;
List<GameObject> bees;
void Start()
{
bees = new List<GameObject>();
for (int i = 0; i < beeCount; i++)
{
Vector3 spot = transform.position + new Vector3(i * 0.6f - 1.2f, 1.5f, 0);
bees.Add(Instantiate(beePrefab, spot, Quaternion.identity));
}
int theirs = rival.GetComponent<Hive>().BeeCount();
Debug.Log(name + " counts " + theirs + " rival bees");
}
public int BeeCount()
{
return bees.Count;
}
}
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: Lichtschalter