Awake e Start
Parte da seção Noções básicas de scripting no Unity do Journey de Unity da Coddy. Lição 55 de 67.
O Unity chama Awake() assim que um objeto é carregado, antes de seu Start(). O que torna isso útil é a regra entre os objetos: quando uma cena começa, o Awake() de cada objeto é executado antes do Start() de qualquer objeto. A ordem dos objetos em cada etapa fica a critério do Unity, e não dá para contar com uma ordem específica.
Este script Player está em dois jogadores, P1 (startLives 3) e P2 (startLives 5), e cada um tem o outro como seu rival:
public int startLives = 3;
public GameObject rival;
int lives;
void Awake()
{
lives = startLives; // configure este objeto
}
void Start()
{
int theirs = rival.GetComponent<Player>().Lives(); // consulte o outro
Debug.Log(name + " sees a rival with " + theirs + " lives");
}
public int Lives()
{
return lives;
}A primeira versão definia lives em Start(). O jogador que começasse primeiro perguntava ao rival antes de ele ter definido suas vidas e registrava 0. Com a configuração em Awake(), ambos os jogadores já têm suas vidas definidas antes que qualquer um dos Start() pergunte, então P1 registra 5 e P2 registra 3. A prática a seguir é: configure os próprios campos de um objeto em Awake() e comunique-se com outros objetos em Start().
Desafio
MédioDuas colmeias, HiveA e HiveB, executam o mesmo script Hive. Cada colmeia instancia suas abelhas (3 e 5, de beeCount) em uma lista e, em seguida, registra quantas abelhas sua rival tem: HiveA counts 5 rival bees e HiveB counts 3 rival bees.
Pressione Play: uma colmeia para com uma NullReferenceException, porque tenta acessar a lista da rival antes que ela a tenha criado. Corrija o script para que todas as colmeias tenham sua lista e suas abelhas antes que qualquer colmeia conte as abelhas da rival. Mantenha a contagem onde está. Em seguida, clique em Check.
Experimente você mesmo
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;
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Noções básicas de scripting no Unity
1Seu primeiro script
Olá, UnityPosicione o cuboMova a cada quadroGire a cada segundoConduza com as teclasRecapitulando: dirija o cubo4Vetores
Adicionando vetoresDireçõesEspaço local e espaço do mundoVelocidade diagonalDistância entre objetosVector3 é uma structRevisão: piloto de drone7Projeto: Pegue a Estrela
O ApanhadorUma Estrela Cadente10O ciclo de vida dos scripts
Awake e StartUpdate e LateUpdateOnEnable e OnDisableA ordem do ciclo de vidaRevisão: registrador do ciclo de vida5Transformações e Hierarquia
Pais e FilhosEscalaObserve as CoisasMova-se em Direção a um PontoRevisão: Lua em Órbita6GameObjects e Componentes
Referências no InspectorObter um ComponenteComponentes AusentesAdicionar um ComponenteRequireComponentMostrar e OcultarRevisão: Interruptor de Luz