Anticipación
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 47 de 63.
Una cámara que apunta a un objetivo en movimiento muestra tanto el lugar por donde ha pasado como hacia dónde va. Apunta en cambio a un punto por delante: la posición del objetivo más su velocidad multiplicada por un tiempo de anticipación en segundos. Esta cámara sobre un soporte junto a un circuito de carreras gira para seguir al coche y apunta a un punto medio segundo por delante:
public Rigidbody car;
public float lead = 0.5f;
void LateUpdate()
{
Vector3 aim = car.position + car.linearVelocity * lead;
transform.LookAt(aim);
}A 20 unidades por segundo, el punto al que apunta está 10 unidades por delante del coche; a 4 unidades por segundo, está a 2, y si el coche está detenido, apunta directamente hacia él. La velocidad representa el movimiento real del coche, así que el punto está en el lugar correcto al derrapar o al dar marcha atrás. transform.forward no serviría: el vector hacia delante de un coche que da marcha atrás apunta en dirección opuesta a aquella hacia la que va, y el vector hacia delante de una pelota que rueda gira con ella.
Una cámara de seguimiento también puede anticiparse: encuadra un punto por delante de su objetivo en lugar del objetivo en sí. Cuando ese punto puede pasar al lado opuesto, como cuando el jugador se da la vuelta, cambia gradualmente la anticipación en cada fotograma; de lo contrario, toda la vista salta de golpe.
Desafío
IntermedioEsta vista lateral sigue al corredor a lo largo del eje x (las flechas lo mueven a izquierda y derecha). Haz que la cámara muestre más de hacia dónde se dirige el corredor:
- La cámara se sitúa
ahead(3) unidades por delante del corredor a lo largo del eje x, en el lado hacia el que se movió el corredor por última vez. Antes de que el corredor se mueva por primera vez, está centrada en él. - Cuando el corredor cambia de dirección, el desplazamiento pasa al otro lado a
shiftSpeed(4) unidades por segundo en lugar de saltar. - Cuando el corredor se detiene, la cámara mantiene su desplazamiento.
- La coordenada y y la coordenada z de la cámara se mantienen como están.
Pulsa Play, corre en ambas direcciones y después pulsa Check.
Pruébalo tú mismo
using UnityEngine;
public class LookAheadCamera : MonoBehaviour
{
public Transform player;
public float ahead = 3f;
public float shiftSpeed = 4f;
void LateUpdate()
{
// Adelántate al jugador ahead unidades en la dirección en la que se movió por última vez, deslizándote a shiftSpeed.
transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
}
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de monedas
La bola rodanteMonedas para recoger8La cámara
Seguimiento suaveCámara orbitalAnticipaciónSacudida de cámaraRepaso: cámara de persecución