Acompanhamento Suave
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 47 de 71.
Uma câmera que copia a posição do jogador mais um deslocamento em LateUpdate() transforma cada solavanco do jogador em um solavanco da visão. Vector3.SmoothDamp(current, target, ref velocity, smoothTime) retorna uma posição que se move em direção a target como uma mola amortecida: ela acelera, desacelera ao se aproximar do alvo e chega sem ultrapassá-lo. Esta câmera segue o jogador a 3 unidades acima e 6 atrás, com um pequeno atraso:
public Transform player;
public Vector3 offset = new Vector3(0, 3, -6);
public float smoothTime = 0.3f;
Vector3 velocity;
void LateUpdate()
{
Vector3 target = player.position + offset;
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);
}ref passa a própria variável para SmoothDamp, em vez de uma cópia, para que o método possa alterá-la. SmoothDamp mantém em velocity a velocidade atual da câmera nos três eixos e precisa recebê-la de volta no próximo quadro, por isso ela é um campo. Se fosse declarada dentro de LateUpdate(), começaria em zero a cada quadro, e a câmera avançaria lentamente, cerca de meio por cento do percurso por quadro. Para um único número, como o zoom de uma câmera, Mathf.SmoothDamp funciona da mesma forma com uma velocidade float.
smoothTime define o quanto a câmera fica para trás: com 0.3, ela percorre cerca de 60% de um salto repentino em 0.3 segundos e chega quase ao destino após 1 segundo. Um valor menor faz com que ela acompanhe mais de perto. SmoothDamp lê Time.deltaTime por conta própria, então nada na chamada é multiplicado por ele.
Desafio
MédioFaça a câmera acompanhar o jogador suavemente a uma altura fixa.
- Adicione um campo
Vector3 velocity;. - Em
LateUpdate(), crieVector3 target = new Vector3(player.position.x, height, player.position.z - back);, para que um salto não mova a visualização. - Defina
transform.position = Vector3.SmoothDamp(transform.position, target, ref velocity, smoothTime);.
Pressione “Jogar”, corra e salte: a câmera fica um pouco para trás e nunca oscila. Depois, pressione “Verificar”.
Experimente você mesmo
using UnityEngine;
public class TopDownCamera : MonoBehaviour
{
public Transform player;
public float height = 12f;
public float back = 5f;
public float smoothTime = 0.25f;
void LateUpdate()
{
// Mova-se suavemente em direção ao ponto acima do player (x), back unidades atrás dele (z), a uma altura fixa.
}
}
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