Changer de voie en douceur
Leçon 2 sur 20 du cours Jeu Unity : Voies célestes de Coddy.
Le personnage saute d’une voie à l’autre en une seule image. Ça fonctionne, mais on dirait une téléportation. Le changement de voie devrait prendre un moment, pour que l’œil puisse le suivre.
Mathf.MoveTowards(current, target, maxStep) déplace un nombre vers une cible d’au plus maxStep, sans jamais la dépasser. Appelée à chaque image avec un pas égal à la vitesse multipliée par Time.deltaTime, elle déplace le nombre à cette vitesse en unités par seconde, quel que soit le nombre d’images par seconde :
float x = Mathf.MoveTowards(transform.position.x, targetX, laneSpeed * Time.deltaTime);Avec laneSpeed réglé sur 16, un changement de voie de 2,5 unités prend environ 0,16 seconde : c’est rapide, mais on le voit.
Défi
Facile- Ajoute
public float laneSpeed = 16f;souslaneWidth. - Remplace
float x = targetX;par la ligneMathf.MoveTowardsci-dessus. - Appuie sur « Jouer » et change de voie.
Essayez vous-même
using UnityEngine;
public class Runner : MonoBehaviour
{
public float laneWidth = 2.5f;
public int lane;
private CharacterController controller;
void Start()
{
controller = GetComponent<CharacterController>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.A) || Input.GetKeyDown(KeyCode.LeftArrow)) lane = Mathf.Max(-1, lane - 1);
if (Input.GetKeyDown(KeyCode.D) || Input.GetKeyDown(KeyCode.RightArrow)) lane = Mathf.Min(1, lane + 1);
float targetX = lane * laneWidth;
float x = targetX;
Vector3 move = new Vector3(x - transform.position.x, 0f, 0f);
controller.Move(move);
}
}
Toutes les leçons de Jeu Unity : Voies célestes
Entraînez-vous par vous-même : Playground Unity