Awake i Start
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 55 z 67.
Unity wywołuje Awake(), gdy tylko obiekt zostanie załadowany — przed jego Start(). Przydatna jest tu zasada dotycząca wszystkich obiektów: gdy scena się uruchamia, metoda Awake() każdego obiektu wykonuje się przed metodą Start() dowolnego obiektu. To, który obiekt wykona się pierwszy w każdej rundzie, zależy od Unity i nie możesz na to liczyć.
Ten skrypt Player jest przypisany do dwóch graczy, P1 (startLives 3) i P2 (startLives 5), a każdy z nich ma drugiego ustawionego jako rival:
public int startLives = 3;
public GameObject rival;
int lives;
void Awake()
{
lives = startLives; // skonfiguruj ten obiekt
}
void Start()
{
int theirs = rival.GetComponent<Player>().Lives(); // zapytaj drugi obiekt
Debug.Log(name + " sees a rival with " + theirs + " lives");
}
public int Lives()
{
return lives;
}Pierwsza wersja ustawiała lives w Start(). Gracz, którego metoda uruchomiła się jako pierwsza, pytał wtedy swojego rywala, zanim ten ustawił swoje życia, i wyświetlał 0. Gdy inicjalizacja odbywa się w Awake(), obaj gracze mają już ustawioną liczbę żyć, zanim metoda Start() któregokolwiek z nich o nie zapyta, więc P1 wyświetla 5, a P2 wyświetla 3. Warto przyjąć następującą zasadę: inicjalizuj własne pola obiektu w Awake(), a komunikuj się z innymi obiektami w Start().
Wyzwanie
ŚredniDwa ule, HiveA i HiveB, uruchamiają ten sam skrypt Hive. Każdy ul umieszcza swoje pszczoły (3 i 5, z beeCount) na liście, a następnie zapisuje, ile pszczół ma jego rywal: HiveA counts 5 rival bees i HiveB counts 3 rival bees.
Naciśnij Graj: jeden ul zatrzymuje się z wyjątkiem NullReferenceException, ponieważ próbuje odczytać listę rywala, zanim ten zdąży ją utworzyć. Popraw skrypt tak, aby każdy ul miał swoją listę i pszczoły, zanim którykolwiek ul policzy pszczoły rywala. Pozostaw liczenie w tym samym miejscu. Następnie naciśnij Sprawdź.
Spróbuj swoich sił
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;
}
}
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Podstawy skryptów w Unity
1Twój pierwszy skrypt
Witaj, UnityUmieść sześcianPoruszaj się w każdej klatceObracaj się co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian4Wektory
Dodawanie wektorówKierunkiPrzestrzeń lokalna i globalnaPrędkość po przekątnejOdległość między obiektamiVector3 jest strukturąPodsumowanie: pilot drona10Cykl życia skryptu
Awake i StartUpdate i LateUpdateOnEnable i OnDisableKolejność cyklu życiaPodsumowanie: rejestrator cyklu życia2Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPodsumowanie: Winda5Transformacje i hierarchia
Rodzice i dzieciSkalaPatrz na obiektyPoruszanie się w kierunku punktuPodsumowanie: Księżyc krążący po orbicie3Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski o nazwachPrzyciski myszyPowtórka: naładowany skok6Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePodsumowanie: włącznik światła