Awake e Start
Parte da seção Fundamentos de Scripting no Unity do Journey de Unity da Coddy. Lição 70 de 85.
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 todos os objetos é executado antes do Start() de qualquer objeto. A ordem dos objetos dentro de cada rodada fica a critério do Unity, e você não pode 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; // configura este objeto
}
void Start()
{
int theirs = rival.GetComponent<Player>().Lives(); // consulta o outro objeto
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 definir suas vidas e registrava 0. Com a configuração em Awake(), ambos os jogadores já têm suas vidas definidas antes que qualquer Start() pergunte, então P1 registra 5 e P2 registra 3. O hábito a seguir é configurar os campos do próprio objeto em Awake() e interagir com outros objetos em Start().
Desafio
MédioCorrija as colmeias para que nenhuma conte uma lista que ainda não foi criada.
- Adicione
void Awake()aHive. - Mova a linha
bees = new List<GameObject>();e o loopfordeStart()paraAwake(). - Deixe as duas linhas de contagem em
Start(): cadaAwake()é executado antes de qualquerStart().
Pressione “Jogar”: cada colmeia registra as abelhas da rival, HiveA conta 5 abelhas rivais, sem erros. Em seguida, “Verificar”.
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;
}
}
Todas as lições de Fundamentos de Scripting no Unity
1Fundamentos de C# no Unity
Olá, UnityVariáveisDecimais precisam de um fTexto no ConsoleVariáveis que guardam valoresIf e ElseComparar númerosRevisão: Coletor de Moedas7Laços e Métodos
Repita com forLaços dentro de laçosEscreva um métodoMétodos que respondemArraysRevisão: Escada10Encontrando coisas
Buscar pelo nomeTagsBuscar por tipoReferências são melhores que FindO null do UnityRevisão: moeda mais próxima13Projeto: Desvie dos Blocos
O CorredorBlocos do Céu2Faça-o se mover
Posicione o cuboMova a cada quadroGire a cada segundoDirija com as teclasRecapitulando: dirija o cubo5Vetores
Somando vetoresDireçõesEspaço local e globalVelocidade diagonalDistância entre objetosVector3 é uma structRevisão: piloto de drone8GameObjects e Componentes
Referências no InspectorObter um componenteComponentes ausentesAdicionar um componenteRequireComponentMostrar e ocultarRevisão: Interruptor de luz6Transformações e hierarquia
Pais e filhosIçar a bandeiraEscalaOlhar para as coisasMover-se em direção a um pontoRevisão: Lua em órbita9Projeto: Pegue a Estrela
O PegadorUma Estrela Cadente12O ciclo de vida dos scripts
Awake e StartUpdate e LateUpdateOnEnable e OnDisableA ordem do ciclo de vidaRecapitulação: registrador do ciclo de vidaPratique por conta própria: Playground de Unity