Cámara orbital
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 46 de 63.
Para orbitar alrededor de un punto, mantén un ángulo, gira un desplazamiento fijo con él y suma el resultado al punto. La multiplicación de un vector por una rotación realiza 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 una estatua a 20 grados por segundo, siempre a 3 unidades de altura y a 6 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 de ella. Mover la cámara no la hace girar, así que LookAt la apunta de nuevo hacia la estatua desde cada nueva posición.
El ángulo se almacena en tu propio campo, como en los ángulos de Euler: puede superar los 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, siempre a distance (8) unidades de la posición de la torre y siempre mirándola. El script mantiene dos ángulos en yaw y pitch:
yawindica cuánto ha girado la cámara alrededor de la torre. La flecha derecha lo aumenta y la flecha izquierda lo reduce, aturnSpeed(90) grados por segundo. Con yaw 0, la cámara está en el lado -z de la torre; con yaw 90, está en el lado -x.pitchindica cuántos grados se eleva la cámara por encima del nivel de la torre, vista desde la torre. La flecha arriba lo aumenta y la flecha abajo lo reduce, atiltSpeed(45) grados por segundo, y se mantiene entre 10 y 60.
Empieza en yaw 0 y pitch 30, lo que la sitúa 4 unidades por encima de la posición de la torre y 6.93 detrás de ella. Pulsa Jugar, vuela alrededor y 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 flechas cambian yaw y pitch.
}
void LateUpdate()
{
// Coloca la cámara alrededor de target y haz que mire hacia él.
}
}
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