Menu
CoddyTech

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.

challenge icon

Desafio

Médio

Permita 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:

  • yaw indica 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, a turnSpeed (90) graus por segundo. Em yaw 0, a câmera fica no lado -z da torre; em yaw 90, fica no lado -x.
  • pitch indica 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, a tiltSpeed (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.
    }
}
quiz iconTeste seus conhecimentos

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