Awake e Start
Fa parte della sezione Fondamenti di scripting in Unity del percorso Unity di Coddy. Lezione 70 di 85.
Unity chiama Awake() appena viene caricato un oggetto, prima del suo Start(). Ciò che lo rende utile è la regola valida per tutti gli oggetti: quando una scena inizia, l'Awake() di ogni oggetto viene eseguito prima dello Start() di qualsiasi oggetto. L'ordine degli oggetti all'interno di ciascuna fase dipende da Unity e non puoi farci affidamento.
Questo script Player è assegnato a due giocatori, P1 (startLives 3) e P2 (startLives 5), e ciascuno ha l'altro come rival:
public int startLives = 3;
public GameObject rival;
int lives;
void Awake()
{
lives = startLives; // inizializza questo oggetto
}
void Start()
{
int theirs = rival.GetComponent<Player>().Lives(); // chiedi all'altro
Debug.Log(name + " sees a rival with " + theirs + " lives");
}
public int Lives()
{
return lives;
}La prima versione impostava lives in Start(). Il giocatore il cui avvio avveniva per primo chiedeva quindi al rivale il numero di vite prima che quest'ultimo lo avesse impostato e registrava 0. Con l'inizializzazione in Awake(), entrambi i giocatori hanno le proprie vite impostate prima che uno dei due le chieda in Start(), quindi P1 registra 5 e P2 registra 3. La regola da seguire è: inizializza i campi di un oggetto in Awake() e interagisci con gli altri oggetti in Start().
Sfida
MedioCorreggi gli alveari in modo che nessuno dei due conti una lista non ancora creata.
- Aggiungi
void Awake()aHive. - Sposta la riga
bees = new List<GameObject>();e il ciclofordaStart()aAwake(). - Lascia le due righe di conteggio in
Start(): ogniAwake()viene eseguito prima di qualsiasiStart().
Premi «Gioca»: ogni alveare registra le api del rivale; HiveA conta 5 api rivali, senza errori. Poi premi «Verifica».
Provalo tu
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;
}
}
Tutte le lezioni di Fondamenti di scripting in Unity
1Nozioni di base di C# in Unity
Ciao, UnityVariabiliI numeri decimali richiedono una fTesto nella ConsoleVariabili che ricordanoIf ed ElseConfrontare i numeriRipasso: il collezionista di monete7Cicli e metodi
Ripeti con forCicli annidatiScrivere un metodoMetodi che restituiscono valoriArrayRiepilogo: scala10Trovare gli oggetti
Trovare per nomeTagTrovare per tipoI riferimenti battono la ricercaIl null di UnityRipasso: la moneta più vicina13Progetto: Schiva i blocchi
Il corridoreBlocchi dal cielo2Fallo muovere
Posiziona il cuboMuovilo a ogni frameRuotalo ogni secondoGuidalo con i tastiRiepilogo: guida il cubo5Vettori
Somma di vettoriDirezioniSpazio locale e spazio mondoVelocità diagonaleDistanza tra gli oggettiVector3 è una structRiepilogo: pilota di droni8GameObject e componenti
Riferimenti nell'InspectorOttenere un componenteComponenti mancantiAggiungere un componenteRequireComponentMostrare e nascondereRiepilogo: interruttore della luce3L’Inspector
Campi dell’InspectorSerializeFieldNumeri decimali e MathfAttributi dell’InspectorRiepilogo: ascensore6Trasformazioni e gerarchia
Genitori e figliIssare la bandieraScalaOsservare gli oggettiMuoversi verso un puntoRiepilogo: Luna in orbita9Progetto: Acchiappa la stella
Il raccoglitoreUna stella cadente12Il ciclo di vita dello script
Awake e StartUpdate e LateUpdateOnEnable e OnDisableL'ordine del ciclo di vitaRiepilogo: Lifecycle LoggerEsercitati da solo: Playground Unity