Seguimiento suave
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 45 de 63.
Una cámara que copia la posición del jugador más un desplazamiento en LateUpdate() hace que cada sacudida del jugador sacuda la vista. Vector3.SmoothDamp(current, target, ref velocity, smoothTime) devuelve una posición que se mueve hacia target como lo haría un resorte amortiguado: acelera, desacelera al acercarse al objetivo y llega sin sobrepasarlo. Esta cámara sigue al jugador desde 3 unidades arriba y 6 detrás, con un pequeño retraso:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
public float smoothTime = 0.3f;
Vector3 velocity;
void LateUpdate()
{
Vector3 target = player.position + offset;
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);
}ref le pasa a SmoothDamp la variable misma en lugar de una copia, para que el método pueda cambiarla. SmoothDamp mantiene en velocity la velocidad actual de la cámara en los tres ejes y la necesita de nuevo en el siguiente fotograma, por eso es un campo. Si se declarara dentro de LateUpdate(), empezaría desde cero en cada fotograma y la cámara avanzaría a paso de tortuga, aproximadamente medio punto porcentual del recorrido por fotograma. Para un solo número, como el zoom de una cámara, Mathf.SmoothDamp funciona de la misma manera con una velocidad float.
smoothTime determina cuánto se retrasa la cámara: con 0.3, cubre aproximadamente el 60% de un salto repentino en 0.3 segundos y está casi allí después de 1 segundo. Un valor menor sigue al objetivo más de cerca. SmoothDamp lee Time.deltaTime por sí mismo, así que no hay que multiplicar por él ningún valor de la llamada.
Desafío
IntermedioLa cámara mira al jugador desde una altura fija. Haz que lo siga suavemente con Vector3.SmoothDamp y smoothTime (0.25), acercándose poco a poco a este punto:
- x: la x del jugador;
- z:
back(5) unidades detrás del jugador, hacia -z; - y: siempre
height(12), sea cual sea la altura del jugador. La barra espaciadora hace que el jugador salte, y la vista no debe moverse arriba y abajo.
Pulsa Play, corre y salta, después pulsa Check.
Pruébalo tú mismo
using UnityEngine;
public class TopDownCamera : MonoBehaviour
{
public Transform player;
public float height = 12f;
public float back = 5f;
public float smoothTime = 0.25f;
void LateUpdate()
{
// Desplázate suavemente hacia el punto situado sobre el jugador (x), a back unidades detrás de él (z), a una altura fija.
}
}
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