Update e LateUpdate
Parte da seção Noções básicas de scripting no Unity do Journey de Unity da Coddy. Lição 56 de 67.
A cada quadro, o Unity chama Update() em cada script e, somente quando todos terminam, chama LateUpdate() em cada script. A ordem em que o Update() de cada objeto é executado não depende de você.
Isso importa para tudo que acompanha outra coisa. Uma câmera que copia a posição do jogador em Update() pode ser executada antes que o próprio Update() do jogador o mova, e então copia a posição em que o jogador estava um quadro antes: a câmera fica um passo atrás, e isso pode mudar quando objetos são adicionados ou a cena é recarregada. Em LateUpdate(), a cópia sempre acontece depois que o jogador se moveu:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
void LateUpdate()
{
transform.position = player.position + offset;
}A regra: mova as coisas em Update() e coloque o código que reage à posição final das coisas, como câmeras, rótulos e mira, em LateUpdate(). Ambos são executados uma vez por quadro, e Time.deltaTime significa a mesma coisa em ambos.
Desafio
MédioO jogador e sua etiqueta de nome executam o script Mover. No Player, target está vazio, então as setas o movem. No NameTag, target é o jogador, então a etiqueta fica offset acima dele.
Pressione Play e mantenha uma seta pressionada: a etiqueta fica atrás do jogador. Aqui, o Update() da etiqueta é executado primeiro e copia a posição em que o jogador estava um quadro atrás. Corrija isso para que a etiqueta fique exatamente acima do jogador em cada quadro e mantenha o movimento pelas setas em Update(). Depois, Check.
Experimente você mesmo
using UnityEngine;
public class Mover : MonoBehaviour
{
public Transform target;
public Vector3 offset;
public float speed = 4f;
void Update()
{
if (target != null)
{
transform.position = target.position + offset;
}
else
{
if (Input.GetKey(KeyCode.RightArrow))
{
transform.position += new Vector3(speed * Time.deltaTime, 0, 0);
}
if (Input.GetKey(KeyCode.LeftArrow))
{
transform.position -= new Vector3(speed * Time.deltaTime, 0, 0);
}
}
}
}
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