Antecipação
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 47 de 63.
Uma câmera apontada para um alvo em movimento mostra tanto de onde ele veio quanto para onde está indo. Em vez disso, aponte para um ponto à frente dele: a posição do alvo mais sua velocidade multiplicada por um tempo de antecipação em segundos. Esta câmera em um suporte ao lado de uma pista de corrida gira para acompanhar o carro e aponta meio segundo à frente dele:
public Rigidbody car;
public float lead = 0.5f;
void LateUpdate()
{
Vector3 aim = car.position + car.linearVelocity * lead;
transform.LookAt(aim);
}A 20 unidades por segundo, o ponto visado fica 10 unidades à frente do carro; a 4 unidades por segundo, fica a 2; e um carro parado é visado diretamente. A velocidade corresponde ao movimento real do carro, então o ponto fica no lugar certo durante uma derrapagem ou ao dar ré. transform.forward não serviria: o vetor para a frente de um carro dando ré aponta para longe de onde ele está indo, e o vetor para a frente de uma bola rolando gira junto com ela.
Uma câmera de acompanhamento também pode antecipar: ela enquadra um ponto à frente do alvo, em vez do próprio alvo. Quando esse ponto pode passar para o outro lado, como quando o jogador dá meia-volta, altere a antecipação um pouco a cada quadro; caso contrário, toda a imagem salta de uma vez.
Desafio
MédioEsta visão lateral acompanha o corredor ao longo do eixo x (as setas o movem para a esquerda e para a direita). Faça a câmera mostrar mais da direção para onde o corredor está indo:
- A câmera fica
ahead(3) unidades à frente do corredor ao longo do eixo x, do lado para o qual o corredor se moveu por último. Antes de o corredor se mover pela primeira vez, ela fica centralizada nele. - Quando o corredor muda de direção, o avanço desliza para o outro lado a
shiftSpeed(4) unidades por segundo, em vez de saltar. - Quando o corredor para, a câmera mantém seu avanço.
- As coordenadas y e z da câmera permanecem como estão.
Pressione Play, corra nas duas direções e, em seguida, pressione Check.
Experimente você mesmo
using UnityEngine;
public class LookAheadCamera : MonoBehaviour
{
public Transform player;
public float ahead = 3f;
public float shiftSpeed = 4f;
void LateUpdate()
{
// Posicione a câmera ahead unidades à frente do player na direção em que ele se moveu por último, deslizando à velocidade shiftSpeed.
transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
}
}
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