Awake i Start
Część sekcji Podstawy skryptów w Unity ścieżki Unity w Coddy. Lekcja 70 z 85.
Unity wywołuje Awake() zaraz po załadowaniu obiektu, przed jego Start(). Przydatna jest zasada obowiązująca dla 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 z tych rund, zależy od Unity i nie możesz na tym polegać.
Ten skrypt Player jest przypisany do dwóch graczy, P1 (startLives 3) i P2 (startLives 5), a każdy z nich ma drugiego jako swojego 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 ten drugi obiekt
Debug.Log(name + " sees a rival with " + theirs + " lives");
}
public int Lives()
{
return lives;
}Pierwsza wersja ustawia wartość lives w Start(). Gracz, którego metoda uruchomiła się jako pierwsza, pytał wtedy rywala, zanim ten ustawił liczbę swoich żyć, i wypisywał 0. Gdy ustawiamy ją w Awake(), obaj gracze mają już ustawioną liczbę swoich żyć, zanim metoda Start() któregokolwiek z nich zada pytanie, więc P1 wypisuje 5, a P2 — 3. Zasada, której warto się trzymać: ustawiaj własne pola obiektu w Awake(), a z innymi obiektami komunikuj się w Start().
Wyzwanie
ŚredniNapraw ule, aby żaden z nich nie zliczał listy, która nie została jeszcze utworzona.
- Dodaj
void Awake()doHive. - Przenieś linię
bees = new List<GameObject>();i pętlęforzStart()doAwake(). - Pozostaw dwie linie zliczające w
Start(): każdeAwake()wykonuje się przed dowolnymStart().
Naciśnij „Graj”: każdy ul rejestruje liczbę pszczół rywala, HiveA zlicza 5 pszczół rywala i nie pojawia się żaden błąd. 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;
}
}
Wszystkie lekcje w sekcji Podstawy skryptów w Unity
1Podstawy C# w Unity
Witaj, UnityZmienneLiczby dziesiętne wymagają fTekst w konsoliZmienne, które pamiętająIf i elsePorównywanie liczbPowtórka: Zbieracz monet4Wejście
Naciśnięty, przytrzymany, zwolnionyOsiePrzyciski z nazwamiPrzyciski myszyPowtórka: naładowany skok7Pętle i metody
Powtarzaj za pomocą forPętle wewnątrz pętliNapisz metodęMetody, które zwracają wynikTablicePowtórka: schody10Wyszukiwanie obiektów
Wyszukiwanie po nazwieTagiWyszukiwanie po typieReferencje lepsze niż wyszukiwanieNull w UnityPowtórka: najbliższa moneta13Projekt: Unikaj bloków
BiegaczBloki z nieba2Wpraw to w ruch
Umieść sześcianPoruszaj w każdej klatceObracaj co sekundęSteruj za pomocą klawiszyPodsumowanie: Prowadź sześcian5Wektory
Dodawanie wektorówKierunkiPrzestrzeń lokalna i globalnaPrędkość po przekątnejOdległość między obiektamiVector3 to strukturaPodsumowanie: pilot drona8Obiekty gry i komponenty
Referencje w InspectorzePobieranie komponentuBrakujące komponentyDodawanie komponentuRequireComponentPokazywanie i ukrywaniePowtórka: włącznik światła3Inspektor
Pola inspektoraSerializeFieldLiczby zmiennoprzecinkowe i MathfAtrybuty inspektoraPowtórka: winda6Przekształcenia i hierarchia
Rodzice i dzieciWciągnij flagęSkalowaniePatrz na obiektyPorusz się w kierunku punktuPodsumowanie: Księżyc na orbicie12Cykl życia skryptu
Awake i StartUpdate i LateUpdateOnEnable i OnDisableKolejność cyklu życiaPodsumowanie: Rejestrator cyklu życiaPoćwicz samodzielnie: Edytor online Unity