Câmera Orbital
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 48 de 71.
Para orbitar um ponto, mantenha um ângulo, gire um deslocamento fixo por esse ângulo e some o resultado ao ponto. A multiplicação de rotação por vetor faz o giro: Quaternion.Euler(0, angle, 0) * offset faz o deslocamento girar em torno do eixo y, enquanto seu comprimento e sua altura permanecem iguais. Esta câmera orbita uma estátua a 20 graus por segundo, sempre a 3 unidades de altura e a 6 de distância:
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);
}Com o ângulo em 0, o deslocamento é (0, 3, -6), então a câmera fica atrás da estátua. Em 90, ele é (-6, 3, 0), ao lado da estátua no sentido de -x, e em 180, é (0, 3, 6), à frente. Mover a câmera não a faz girar, então LookAt a aponta de volta para a estátua a partir de cada nova posição.
Um segundo ângulo eleva a câmera: Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance) gira a direção para trás para cima em pitch (um giro positivo em torno de x inclina (0, 0, -1) para cima) e, em seguida, gira em torno de y por yaw, mantendo a câmera a distance de distância em qualquer ângulo.
O ângulo fica em seu próprio campo, como em Ângulos de Euler: ele pode ultrapassar 360 ou ficar abaixo de 0 sem nenhum salto, e você pode limitá-lo ou alterá-lo pelo teclado. Fazer isso em LateUpdate() posiciona a câmera depois que a estátua ou um jogador se moveu naquele quadro.
Desafio
MédioDeixe o jogador voar com a câmera ao redor da torre.
- Em
Update(), as setas para a direita e para a esquerda alteramyawcomturnSpeed, e as setas para cima e para baixo alterampitchcomtiltSpeed, multiplicados porTime.deltaTime. - Depois, mantenha
pitch = Mathf.Clamp(pitch, 10f, 60f);. - Em
LateUpdate(), definatransform.position = target.position + Quaternion.Euler(pitch, yaw, 0) * new Vector3(0, 0, -distance);e, em seguida,transform.LookAt(target);.
Pressione “Jogar” e voe ao redor da torre. Depois, clique em “Verificar”.
Experimente você mesmo
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()
{
// As teclas de seta alteram yaw e pitch.
}
void LateUpdate()
{
// Posicione a câmera ao redor do target e aponte-a para ele.
}
}
Todas as lições de Física e Jogabilidade
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para Coletar8A Câmera
Acompanhamento SuaveCâmera OrbitalAntecipaçãoTremor da CâmeraRevisão: Câmera de PerseguiçãoPratique por conta própria: Playground de Unity