Awake et Start
Fait partie de la section Les bases du scripting dans Unity du Journey Unity de Coddy. Leçon 70 sur 85.
Unity appelle Awake() dès qu'un objet est chargé, avant son Start(). Ce qui rend cela utile, c'est la règle qui s'applique à tous les objets : au démarrage d'une scène, le Awake() de chaque objet s'exécute avant le Start() de n'importe quel objet. Unity décide de l'ordre des objets au sein de chaque étape, et tu ne peux pas compter sur un ordre précis.
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 dont le démarrage avait lieu 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 avant que l'un ou l'autre Start() ne pose sa question : P1 affiche 5 dans le journal et P2 affiche 3. La bonne habitude à prendre : initialise les champs propres à un objet dans Awake(), et communique avec les autres objets dans Start().
Défi
MoyenCorrige les ruches pour qu’aucune ne compte une liste qui n’a pas encore été créée.
- Ajoute
void Awake()àHive. - Déplace la ligne
bees = new List<GameObject>();et la bouclefordeStart()versAwake(). - Laisse les deux lignes de comptage dans
Start(): chaqueAwake()s’exécute avant n’importe quelStart().
Appuie sur « Jouer » : chaque ruche affiche dans le journal le nombre d’abeilles de sa rivale, HiveA compte 5 abeilles rivales, sans erreur. Puis appuie sur « 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;
}
}
Toutes les leçons de Les bases du scripting dans Unity
1Les bases de C# dans Unity
Bonjour, UnityVariablesLes nombres décimaux ont besoin d’un fDu texte dans la consoleDes variables qui mémorisentSi et sinonComparer des nombresRécapitulatif : le collecteur de pièces7Boucles et méthodes
Répéter avec forBoucles imbriquéesÉcrire une méthodeMéthodes qui renvoient une réponseTableauxRécapitulatif : escalier10Rechercher des objets
Rechercher par nomTagsRechercher par typeLes références plutôt que la rechercheLe null de UnityRécapitulatif : la pièce la plus proche13Projet : Éviter les blocs
Le coureurDes blocs tombent du ciel2Mettez-le en mouvement
Placez le cubeDéplacez-le à chaque frameTournez chaque secondeDirigez avec les touchesRécapitulatif : pilotez le cube5Vecteurs
Additionner des vecteursDirectionsEspace local et espace globalVitesse diagonaleDistance entre des objetsVector3 est une structureRécapitulatif : pilote de drone8GameObjects et composants
Références dans l’InspectorObtenir un composantComposants manquantsAjouter un composantRequireComponentAfficher et masquerRécapitulatif : interrupteur3L’inspecteur
Champs de l’inspecteurSerializeFieldFlottants et MathfAttributs de l’inspecteurRécapitulatif : ascenseur6Transformations et hiérarchie
Parents et enfantsHissez le drapeauÉchelleRegarder les objetsSe déplacer vers un pointRécapitulatif : la lune en orbite9Projet : Attrape l’étoile
Le receveurUne étoile filante12Le cycle de vie d’un script
Awake et StartUpdate et LateUpdateOnEnable et OnDisableL’ordre du cycle de vieRécapitulatif : journal du cycle de vieEntraînez-vous par vous-même : Playground Unity