Awake et Start
Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 55 sur 67.
Unity appelle Awake() dès qu’un objet est chargé, avant son Start(). Ce qui le rend utile, c’est la règle qui s’applique à tous les objets : au démarrage d’une scène, la méthode Awake() de chaque objet est exécutée avant la méthode Start() de n’importe quel objet. Unity décide de l’ordre d’exécution des objets au sein de chaque série, et tu ne peux pas t’y fier.
Ce script Player est attaché à deux joueurs, P1 (startLives 3) et P2 (startLives 5), et chacun a l’autre comme rival :
public int startLives = 3;
public GameObject rival;
int lives;
void Awake()
{
lives = startLives; // initialiser cet objet
}
void Start()
{
int theirs = rival.GetComponent<Player>().Lives(); // interroger l'autre
Debug.Log(name + " sees a rival with " + theirs + " lives");
}
public int Lives()
{
return lives;
}La première version définissait lives dans Start(). Le joueur qui démarrait en premier interrogeait alors son rival avant que celui-ci ait défini ses vies, et affichait 0 dans le journal. Avec l’initialisation dans Awake(), les deux joueurs ont leurs vies définies avant que l’un ou l’autre n’interroge son rival dans Start() : P1 affiche 5 et P2 affiche 3. La règle à retenir : initialise les champs propres à un objet dans Awake() et communique avec les autres objets dans Start().
Défi
MoyenDeux ruches, HiveA et HiveB, exécutent le même script Hive. Chaque ruche fait apparaître ses abeilles (3 et 5, à partir de beeCount) dans une liste, puis affiche le nombre d’abeilles de sa rivale : HiveA counts 5 rival bees et HiveB counts 3 rival bees.
Appuie sur Jouer : une ruche s’arrête avec une NullReferenceException, car elle demande la liste de sa rivale avant que celle-ci ne l’ait créée. Corrige le script pour que chaque ruche ait sa liste et ses abeilles avant qu’une ruche ne compte celles de sa rivale. Garde le comptage à sa place. Puis Vérifier.
Essayez vous-même
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;
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Les bases du scripting dans Unity
1Votre premier script
Bonjour, UnityPlacez le cubeBouger à chaque imageTourner chaque secondeDirigez avec les touchesRécapitulatif : conduisez le cube4Vecteurs
Addition de vecteursDirectionsEspaces local et mondeVitesse diagonaleDistance entre les objetsVector3 est une structRécapitulatif : pilote de drone7Projet : Attrape l’étoile
L’attrapeurUne étoile qui tombe10Le cycle de vie d’un script
Awake et StartUpdate et LateUpdateOnEnable et OnDisableL’ordre du cycle de vieRécapitulatif : journaliseur du cycle de vie2L’inspecteur
Champs de l’inspecteurSerializeFieldNombres flottants et MathfAttributs de l’inspecteurRécapitulatif : ascenseur5Transformations et hiérarchie
Parents et enfantsÉchelleRegarder les objetsSe déplacer vers un pointRécapitulatif : Lune en orbite8Rechercher des objets
Rechercher par nomTagsRechercher par typeLes références plutôt que FindLe null de UnityRécapitulatif : la pièce la plus proche11Projet : Esquivez les blocs
Le coureurBlocs qui tombent6GameObjects et composants
Références dans l’InspectorObtenir un composantComposants manquantsAjouter un composantRequireComponentAfficher et masquerRécapitulatif : interrupteur