Seguimiento suave
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 47 de 71.
Una cámara que copia la posición del jugador más un desplazamiento en LateUpdate() convierte cada sacudida del jugador en una sacudida de la vista. Vector3.SmoothDamp(current, target, ref velocity, smoothTime) devuelve una posición que se desplaza hacia target como lo haría un resorte amortiguado: acelera, reduce la velocidad al acercarse al objetivo y llega sin sobrepasarlo. Esta cámara sigue al jugador desde 3 unidades arriba y 6 por 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 en sí, en lugar de una copia, para que el método pueda modificarla. SmoothDamp mantiene en velocity la velocidad actual de la cámara en los tres ejes y la necesita de vuelta 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 por ciento del recorrido por fotograma. Para un solo número, como el zoom de una cámara, Mathf.SmoothDamp funciona del mismo modo con una velocidad float.
smoothTime determina cuánto se retrasa la cámara: con 0.3, recorre aproximadamente el 60% de un salto repentino en 0.3 segundos y casi llega al cabo de 1 segundo. Un valor más pequeño la hace seguir más de cerca. SmoothDamp lee Time.deltaTime por sí mismo, así que no se multiplica por este ningún valor de la llamada.
Desafío
IntermedioHaz que la cámara siga al jugador suavemente desde una altura fija.
- Añade un campo
Vector3 velocity;. - En
LateUpdate(), construyeVector3 target = new Vector3(player.position.x, height, player.position.z - back);, para que un salto no mueva la vista. - Establece
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);.
Pulsa «Jugar», corre y salta: la cámara te sigue con un ligero retraso y nunca rebota. Después, pulsa «Comprobar».
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.
}
}
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 lanzamiento4Corrutinas
InvocarInvokeRepeating y CancelInvokeTu primera corrutinaBucles en corrutinasDetener corrutinasRepaso: cuenta regresiva10Proyecto: Escape de la arena
La arenaCazadores2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de Monedas
La pelota rodanteMonedas para recoger8La cámara
Seguimiento suaveCámara orbitalAnticipaciónSacudida de cámaraRepaso: cámara de persecución3Disparadores
Colisionadores de tipo triggerOnTriggerEnterObjetos coleccionablesLas cajas guardan el restoZonas letalesEntrada y salidaRepaso: llave y puertaPractica por tu cuenta: Playground de Unity