Menu
CoddyTech

Collision et redémarrage

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

challenge icon

Défi

Moyen

Un crash met fin à la partie, et un bouton en lance une nouvelle. Conserve tout ce qui vient des leçons précédentes. Le canevas contient un GameOverPanel masqué avec un RestartButton intitulé Relancer, et la scène renseigne deux nouveaux champs de GameManager, gameOverPanel et restartButton. Le Runner possède un Rigidbody cinématique, il reçoit donc les messages de déclenchement des obstacles.

Dans GameManager :

  • Au-dessus de la classe, déclare public enum GameState { Playing, GameOver }, puis ajoute à la classe un champ public GameState state qui commence par Playing.
  • Ajoute using UnityEngine.UI;, using UnityEngine.SceneManagement;, public GameObject gameOverPanel; et public Button restartButton;.
  • Une méthode publique GameOver() définit state sur GameOver, définit speed sur 0, ce qui arrête tous les obstacles, et affiche le panneau.
  • Update() ne fait rien tant que l’état n’est pas Playing, ainsi la vitesse et la distance s’arrêtent.
  • Dans Start(), fais en sorte que restartButton recharge la scène en cours.

Dans Runner : lorsqu’il entre dans un déclencheur portant l’étiquette Obstacle, appelle GameManager.Instance.GameOver(). Tant que l’état n’est pas Playing, les flèches ne font rien.

Dans Spawner : ne génère rien tant que l’état n’est pas Playing.

Appuie sur Jouer, provoque un crash et relance la partie, puis clique sur Vérifier.

Essayez vous-même

using UnityEngine;
using TMPro;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;

    public float speed = 10f;
    public float speedUp = 0.5f;
    public float maxSpeed = 20f;
    public TMP_Text distanceText;
    private float distance;

    void Awake()
    {
        Instance = this;
    }

    void Update()
    {
        speed = Mathf.Min(speed + speedUp * Time.deltaTime, maxSpeed);
        distance += speed * Time.deltaTime;
        distanceText.text = "Distance: " + Mathf.FloorToInt(distance) + " m";
    }
}

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