Update y LateUpdate
Parte de la sección Fundamentos de scripting en Unity del Journey de Unity de Coddy. Lección 71 de 85.
En cada fotograma, Unity llama a Update() en cada script, y solo cuando todos han terminado llama a LateUpdate() en cada script. No depende de ti cuál objeto ejecuta primero Update().
Eso importa para cualquier cosa que siga a otra. Una cámara que copia la posición del jugador en Update() puede ejecutarse antes de que el propio Update() del jugador lo haya movido, y entonces copia la posición que tenía el jugador un fotograma antes: la cámara se queda un paso atrás, y esto puede cambiar cuando se añaden objetos o se vuelve a cargar la escena. En LateUpdate(), la copia siempre se realiza después de que el jugador se haya movido:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
void LateUpdate()
{
transform.position = player.position + offset;
}La regla: mueve las cosas en Update() y pon el código que reacciona a la posición final de las cosas, como las cámaras, las etiquetas y la puntería, en LateUpdate(). Ambos se ejecutan una vez por fotograma, y Time.deltaTime significa lo mismo en ambos.
Desafío
IntermedioHaz que la etiqueta con el nombre quede justo encima del jugador en cada fotograma.
- Añade
void LateUpdate(), que se ejecuta después deUpdate()de cada script. - Mueve la parte
if (target != null)dentro de él y deja solo el movimiento con las flechas enUpdate(), bajoif (target == null).
Pulsa «Jugar» y mantén pulsada una flecha: la etiqueta permanece justo encima del jugador. Después, pulsa «Comprobar».
Pruébalo tú mismo
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);
}
}
}
}
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