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.
Défi
MoyenLa 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 :
speedunité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);
}
}
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
1Texte à l’écran
Canvas et texteAfficher le scoreFormater les nombresUn compte à reboursRécapitulatif : compteur de vitesse4Scènes et niveaux
Charger une scèneRedémarrer le niveauNiveau suivantConserver entre les scènesRécapitulatif : sélection du niveau7Contrôle du temps
Mettre en pause avec timeScaleRalentiTemps non mis à l’échelleRécapitulatif : Bullet Time10Projet : jeu de plateforme en 3D
Le parcoursPlateformes mobiles2Boutons et écrans
Boutons et onClickLambdasRelier les éléments dans l’InspectorActiver et désactiver les panneauxBarres de santéRécapitulatif : boutique d’améliorations5Sauvegarder avec PlayerPrefs
Enregistrer un nombreCharger avec une valeur par défautMeilleur scoreEnregistrer les paramètresRécapitulatif : les pièces à la banque8Contrôleur de personnage
CharacterController.MoveGravité manuelleSauterPousser des objetsAvancer dans la direction du regardRécapitulatif : double saut