Câmera Orbital
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 46 de 63.
Para orbitar em torno de um ponto, mantenha um ângulo, gire um deslocamento fixo por ele e some o resultado ao ponto. A multiplicação de rotação por vetor faz o giro: Quaternion.Euler(0, angle, 0) * offset gira o deslocamento em torno do eixo y, e seu comprimento e 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);
}No ângulo 0, o deslocamento é (0, 3, -6), então a câmera fica atrás da estátua. Em 90, é (-6, 3, 0), do lado -x da estátua, e em 180, é (0, 3, 6), à frente. Mover a câmera não a gira, então LookAt a aponta novamente para a estátua a partir de cada nova posição.
O ângulo fica no seu próprio campo, como em Ângulos de Euler: ele pode passar de 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 durante o quadro.
Desafio
MédioPermita que o jogador faça a câmera orbitar ao redor da torre, sempre a distance (8) unidades da posição da torre e sempre olhando para ela. O script mantém dois ângulos em yaw e pitch:
yawindica o quanto a câmera girou ao redor da torre. A seta para a direita aumenta esse valor e a seta para a esquerda o diminui, aturnSpeed(90) graus por segundo. Em yaw 0, a câmera fica no lado -z da torre; em yaw 90, fica no lado -x.pitchindica quantos graus a câmera está elevada acima do nível da torre, vista da torre. A seta para cima aumenta esse valor e a seta para baixo o diminui, atiltSpeed(45) graus por segundo, e ele permanece entre 10 e 60.
Ela começa em yaw 0 e pitch 30, o que a coloca 4 unidades acima da posição da torre e 6.93 atrás dela. Pressione Play, voe ao redor e, em seguida, pressione Check.
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 de target e faça-a olhar para ele.
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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çamento2Colisõ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ção