Menu
CoddyTech

Anticipación

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 49 de 71.

Una cámara centrada en un jugador en movimiento muestra tanto de dónde viene como hacia dónde va. En cambio, una vista lateral puede adelantarse: colócala a unas pocas unidades por delante del jugador, del lado hacia el que se dirige.

El lado cambia cuando el jugador se da la vuelta, y un adelanto que cambia de golpe hace que toda la vista dé un salto. Así que guarda el adelanto en un campo y deslízalo hacia su nuevo valor con Mathf.MoveTowards, un poco en cada fotograma. Esta cámara de barco se adelanta 2 unidades y se desliza a 3 unidades por segundo:

float lead;
float heading = 1f;   // 1 navegando hacia la derecha, -1 navegando hacia la izquierda

void LateUpdate()
{
    lead = Mathf.MoveTowards(lead, heading * 2f, 3f * Time.deltaTime);
    transform.position = new Vector3(boat.position.x + lead, transform.position.y, transform.position.z);
}

El rumbo es la dirección en la que se movió el barco por última vez: compara su x con su x del fotograma anterior y mantén el rumbo sin cambios en un fotograma en el que no se haya movido, para que el barco conserve su adelanto cuando esté en reposo.

challenge icon

Desafío

Intermedio

Haz que la cámara lateral muestre más de hacia dónde se dirige el corredor.

  1. En LateUpdate(), compara la x del corredor con lastX: si se mueve a la derecha, establece direction en 1; si se mueve a la izquierda, en -1; si se queda quieto, déjalo como está.
  2. Desplaza gradualmente shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);.
  3. Establece la x de la cámara en player.position.x + shift, manteniendo y y z.

Pulsa «Jugar» y corre en ambas direcciones. Después, pulsa «Comprobar».

Pruébalo tú mismo

using UnityEngine;

public class LookAheadCamera : MonoBehaviour
{
    public Transform player;
    public float ahead = 3f;
    public float shiftSpeed = 4f;

    void LateUpdate()
    {
        // Adelanta al jugador ahead unidades en la dirección en que se movió por última vez, desplazándote a shiftSpeed.
        transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
    }
}

Todas las lecciones de Física y jugabilidad

Practica por tu cuenta: Playground de Unity