Cámara orbital
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 48 de 71.
Para orbitar alrededor de un punto, mantén un ángulo, gira un desplazamiento fijo según ese ángulo y suma el resultado al punto. La multiplicación de una rotación por un vector hace el giro: Quaternion.Euler(0, angle, 0) * offset hace girar el desplazamiento alrededor del eje y, y su longitud y altura se mantienen iguales. Esta cámara orbita alrededor de una estatua a 20 grados por segundo, siempre a 3 unidades de altura y a 6 unidades de distancia:
public Transform statue;
public float speed = 20f;
float angle;
void LateUpdate()
{
angle += speed * Time.deltaTime;
Vector3 offset = new Vector3(0, 3, -6);
transform.position = statue.position + Quaternion.Euler(0, angle, 0) * offset;
transform.LookAt(statue);
}Con un ángulo de 0, el desplazamiento es (0, 3, -6), así que la cámara está detrás de la estatua. Con 90, es (-6, 3, 0), en el lado -x de la estatua, y con 180 es (0, 3, 6), delante. Mover la cámara no la hace girar, así que LookAt vuelve a apuntarla hacia la estatua desde cada nueva posición.
Un segundo ángulo eleva la cámara: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) gira la dirección hacia atrás hacia arriba en pitch (un giro positivo alrededor de x inclina (0, 0, -1) hacia arriba) y luego la hace girar en yaw, por lo que la cámara se mantiene a distance de distancia en cualquier ángulo.
El ángulo se almacena en tu propio campo, como en Ángulos de Euler: puede superar 360 o bajar de 0 sin saltos, y puedes limitarlo o cambiarlo desde el teclado. Hacer esto en LateUpdate() coloca la cámara después de que la estatua, o un jugador, se haya movido durante el fotograma.
Desafío
IntermedioDeja que el jugador haga volar la cámara alrededor de la torre.
- En
Update(), las flechas derecha e izquierda cambianyawaturnSpeed, y las flechas arriba y abajo cambianpitchatiltSpeed, multiplicados porTime.deltaTime. - Después, mantén
pitch = Mathf.Clamp(pitch, 10f, 60f);. - En
LateUpdate(), establecetransform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);y despuéstransform.LookAt(target);.
Pulsa «Jugar» y haz volar la cámara alrededor de la torre. Después, pulsa «Comprobar».
Pruébalo tú mismo
using UnityEngine;
public class OrbitCamera : MonoBehaviour
{
public Transform target;
public float distance = 8f;
public float turnSpeed = 90f;
public float tiltSpeed = 45f;
public float yaw = 0f;
public float pitch = 30f;
void Update()
{
// Las teclas de flecha cambian yaw y pitch.
}
void LateUpdate()
{
// Coloca la cámara alrededor de target y haz que apunte hacia él.
}
}
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