Menu
CoddyTech

Avancer dans la direction du regard

Fait partie de la section Créer de vrais jeux du Journey Unity de Coddy. Leçon 41 sur 56.

Lorsque la caméra regarde le joueur sous un angle, les flèches doivent déplacer le joueur comme à l'écran : vers le haut, il s'éloigne de la caméra ; vers la droite, il se déplace vers la droite de la caméra. Les axes du monde ne fonctionnent ainsi que lorsque la caméra regarde le long de +z. Construis donc le déplacement à partir des directions propres à la caméra, cam.forward et cam.right.

Il faut d'abord les ajuster. Une caméra qui regarde le joueur depuis le haut a un forward qui pointe dans le sol ; règle donc son y à 0 pour ne garder que la composante parallèle au sol. Le vecteur restant est plus court que 1 — environ 0,87 pour une caméra inclinée vers le bas de 30 degrés — et le joueur marcherait donc plus lentement ; normalise-le. Ce personnage suit la caméra principale, qui regarde vers un coin du niveau :

Transform cam = Camera.main.transform;

Vector3 forward = cam.forward;
forward.y = 0f;
forward.Normalize();
Vector3 right = cam.right;
right.y = 0f;
right.Normalize();

Vector3 move = forward * Input.GetAxisRaw("Vertical") + right * Input.GetAxisRaw("Horizontal");
if (move.magnitude > 1f) move.Normalize();   // pas plus vite en diagonale
controller.Move(move * speed * Time.deltaTime);

Camera.main est la caméra portant le tag MainCamera. Les deux directions sont lues à chaque image, de sorte que les commandes restent correctes lorsque la caméra tourne. Vers le haut et vers la droite ensemble, elles additionnent deux vecteurs unitaires perpendiculaires, ce qui donne une longueur d'environ 1,41 ; le déplacement est donc normalisé lorsqu'il dépasse 1.

challenge icon

Défi

Moyen

La caméra tourne lentement autour du joueur (CameraRig.cs, prêt), de sorte que les axes du monde continuent de tourner à l’écran. Faites en sorte que les flèches déplacent le joueur par rapport à la caméra dans Mover.cs, où la gravité est déjà programmée. Dans l’Inspector, définissez speed (4) et cam, le Transform de la caméra.

  • La flèche vers le haut fait avancer le joueur en s’éloignant de la caméra au sol, celle vers le bas le rapproche, et les flèches droite et gauche le déplacent respectivement vers la droite et la gauche de la caméra : speed unités par seconde dans toutes les directions, diagonales comprises, même si la caméra regarde le joueur d’en haut.
  • Pendant qu’il se déplace, le joueur se tourne dans la direction où il avance. Lorsqu’il s’arrête, il continue de faire face à cette direction.

Appuyez sur Play, déplacez-vous pendant que la caméra tourne, puis cliquez sur Check.

Essayez vous-même

using UnityEngine;

public class Mover : MonoBehaviour
{
    public float speed = 4f;
    public float gravity = -15f;
    public Transform cam;

    CharacterController controller;
    float verticalSpeed;

    void Start()
    {
        controller = GetComponent<CharacterController>();
    }

    void Update()
    {
        if (controller.isGrounded && verticalSpeed < 0f)
        {
            verticalSpeed = -2f;
        }
        verticalSpeed += gravity * Time.deltaTime;

        // Se déplace selon les axes du monde : fais-le se déplacer par rapport à cam et s'orienter dans la direction de son déplacement
        Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical")) * speed;
        move.y = verticalSpeed;
        controller.Move(move * Time.deltaTime);
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Créer de vrais jeux