Menu
CoddyTech

Antecipação

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 49 de 71.

Uma câmera centralizada em um jogador em movimento mostra tanto o caminho que ele já percorreu quanto para onde está indo. Em vez disso, uma visão lateral pode se adiantar: fique algumas unidades à frente do jogador, no lado para o qual ele está indo.

O lado muda quando o jogador dá meia-volta, e uma antecipação que muda de lado instantaneamente faz a visão inteira pular. Então, mantenha a antecipação em um campo e deslize-a até o novo valor com Mathf.MoveTowards, um pouco a cada quadro. Esta câmera de barco se adianta 2 unidades e desliza a 3 unidades por segundo:

float lead;
float heading = 1f;   // 1 navegando para a direita, -1 navegando para a esquerda

void LateUpdate()
{
    lead = Mathf.MoveTowards(lead, heading * 2f, 3f * Time.deltaTime);
    transform.position = new Vector3(boat.position.x + lead, transform.position.y, transform.position.z);
}

A direção é o sentido em que o barco se moveu por último: compare sua posição x com a posição x no quadro anterior e mantenha a direção inalterada em um quadro em que ele não se moveu, para que um barco parado mantenha a antecipação.

challenge icon

Desafio

Médio

Faça com que a câmera lateral mostre mais da direção para a qual o corredor está indo.

  1. Em LateUpdate(), compare o x do corredor com lastX: mover-se para a direita define direction como 1, para a esquerda como -1; ficar parado mantém o valor.
  2. Deslize shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);.
  3. Defina o x da câmera como player.position.x + shift, mantendo y e z.

Pressione “Jogar” e corra nas duas direções. Em seguida, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class LookAheadCamera : MonoBehaviour
{
    public Transform player;
    public float ahead = 3f;
    public float shiftSpeed = 4f;

    void LateUpdate()
    {
        // Mantenha a câmera ahead unidades à frente do player na direção em que ele se moveu pela última vez, deslizando à velocidade shiftSpeed.
        transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
    }
}

Todas as lições de Física e Jogabilidade

Pratique por conta própria: Playground de Unity