Menu
CoddyTech

Anticipation

Fait partie de la section Physique et gameplay du Journey Unity de Coddy. Leçon 49 sur 71.

Une caméra centrée sur un joueur en mouvement montre autant l’endroit d’où il vient que celui vers lequel il se dirige. Une vue latérale peut plutôt le devancer : place-la quelques unités devant le joueur, du côté vers lequel il se dirige.

La vue latérale s’inverse quand le joueur fait demi-tour, et une avance qui s’inverse instantanément fait bondir toute la vue. Gardez donc l’avance dans un champ et faites-la glisser vers sa nouvelle valeur avec Mathf.MoveTowards, un peu à chaque image. Cette caméra de bateau devance le bateau de 2 unités et glisse à raison de 3 unités par seconde :

float lead;
float heading = 1f;   // 1 navigue vers la droite, -1 navigue vers la gauche

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);
}

La direction est celle dans laquelle le bateau s’est déplacé en dernier : comparez son x à celui de l’image précédente et ne modifiez pas la direction pendant une image où il n’a pas bougé, afin qu’un bateau à l’arrêt conserve son avance.

challenge icon

Défi

Moyen

Fais en sorte que la caméra latérale montre davantage la direction dans laquelle le coureur avance.

  1. Dans LateUpdate(), compare l’abscisse du coureur à lastX : s’il se déplace vers la droite, définis direction sur 1 ; vers la gauche, sur -1 ; s’il reste immobile, ne la modifie pas.
  2. Fais glisser shift = Mathf.MoveTowards(shift, direction * ahead, shiftSpeed * Time.deltaTime);.
  3. Définis l’abscisse de la caméra sur player.position.x + shift, en conservant y et z.

Appuie sur « Jouer » et cours dans les deux directions. Puis appuie sur « Vérifier ».

Essayez vous-même

using UnityEngine;

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

    void LateUpdate()
    {
        // Place la caméra ahead unités devant le joueur dans la direction de son dernier déplacement, en la faisant glisser à la vitesse shiftSpeed.
        transform.position = new Vector3(player.position.x, transform.position.y, transform.position.z);
    }
}

Toutes les leçons de Physique et gameplay

Entraînez-vous par vous-même : Playground Unity