Acompanhamento Suave
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 45 de 63.
Uma câmera que copia a posição do jogador mais um deslocamento em LateUpdate() faz com que cada solavanco do jogador também seja 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: acelera, desacelera ao se aproximar do alvo e chega até ele 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 do zero a cada quadro, e a câmera avançaria lentamente, cerca de meio por cento do trajeto por quadro. Para um único número, como o zoom da câmera, Mathf.SmoothDamp funciona da mesma forma com uma velocidade float.
smoothTime define o quanto a câmera fica atrasada: 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édioA câmera olha para o jogador de cima, a uma altura fixa. Faça-a segui-lo suavemente com Vector3.SmoothDamp e smoothTime (0.25), aproximando-se deste ponto:
- x: o x do jogador;
- z:
back(5) unidades atrás do jogador, em direção a -z; - y: sempre
height(12), seja qual for a altura do próprio jogador. A tecla Espaço faz o jogador pular, e a câmera não deve balançar.
Pressione Play, corra e pule, depois Check.
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()
{
// Desloque-se suavemente em direção ao ponto acima do player (x), back unidades atrás dele (z), a uma altura fixa.
}
}
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