Awake y Start
Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 70 de 85.
Unity llama a Awake() en cuanto se carga un objeto, antes de su Start(). Lo que hace que sea útil es la regla que se aplica a todos los objetos: cuando empieza una escena, se ejecuta el Awake() de cada objeto antes del Start() de cualquiera de ellos. Unity decide qué objeto va primero en cada ronda, y no puedes contar con un orden determinado.
Este script Player está en dos jugadores, P1 (startLives 3) y P2 (startLives 5), y cada uno tiene al otro como su rival:
public int startLives = 3;
public GameObject rival;
int lives;
void Awake()
{
lives = startLives; // configura este objeto
}
void Start()
{
int theirs = rival.GetComponent<Player>().Lives(); // consulta al otro
Debug.Log(name + " sees a rival with " + theirs + " lives");
}
public int Lives()
{
return lives;
}La primera versión establecía lives en Start(). El jugador que empezaba primero le preguntaba entonces a su rival antes de que este hubiera establecido sus vidas, y registraba 0. Con la inicialización en Awake(), ambos jugadores tienen sus vidas establecidas antes de que cualquiera de los dos las consulte en Start(), así que P1 registra 5 y P2 registra 3. La costumbre que debes adoptar: inicializa los campos propios de un objeto en Awake() y comunícate con otros objetos en Start().
Desafío
IntermedioCorrige las colmenas para que ninguna cuente una lista que aún no se ha creado.
- Añade
void Awake()aHive. - Mueve la línea
bees = new List<GameObject>();y el buclefordeStart()aAwake(). - Deja las dos líneas de conteo en
Start(): cadaAwake()se ejecuta antes que cualquierStart().
Pulsa «Jugar»: cada colmena registra las abejas de su rival; HiveA cuenta 5 abejas rivales, sin errores. Luego pulsa «Comprobar».
Pruébalo tú mismo
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;
}
}
Todas las lecciones de Fundamentos de scripting en Unity
1Conceptos básicos de C# en Unity
Hola, UnityVariablesLos decimales necesitan una fTexto en la consolaVariables que recuerdanIf y ElseComparar númerosRepaso: Recolector de monedas7Bucles y métodos
Repetir con forBucles dentro de buclesEscribir un métodoMétodos que respondenArraysRepaso: escalera10Encontrar cosas
Buscar por nombreEtiquetasBuscar por tipoLas referencias vencen a FindEl null de UnityRepaso: moneda más cercana13Proyecto: Esquiva los bloques
El corredorBloques desde el cielo2Haz que se mueva
Coloca el cuboMuévelo en cada fotogramaGira cada segundoDirige con las teclasRepaso: conduce el cubo5Vectores
Sumar vectoresDireccionesEspacio local y mundialVelocidad diagonalDistancia entre objetosVector3 es una estructuraRepaso: piloto de dron8GameObjects y componentes
Referencias en el InspectorObtener un componenteComponentes faltantesAñadir un componenteRequireComponentMostrar y ocultarRepaso: interruptor de luz3El Inspector
Campos del InspectorSerializeFieldFloats y MathfAtributos del InspectorRepaso: Ascensor6Transformaciones y jerarquía
Padres e hijosIza la banderaEscalaMira las cosasMuévete hacia un puntoRepaso: Luna en órbita9Proyecto: Atrapa la estrella
El cazadorUna estrella fugaz12El ciclo de vida de un script
Awake y StartUpdate y LateUpdateOnEnable y OnDisableEl orden del ciclo de vidaRepaso: registrador del ciclo de vidaPractica por tu cuenta: Playground de Unity