Mise en œuvre d'une condition gagnante dans Unity

Dans de nombreux jeux, une condition de victoire claire est essentielle pour déterminer si le joueur a réussi. Dans ce tutoriel, nous allons implémenter une condition de victoire simple dans Unity. Cette condition vérifiera si le joueur répond à certains critères (par exemple, collecter des objets, vaincre des ennemis ou atteindre une destination) et déclenchera un état de victoire lorsque ces conditions sont remplies.

1. Définir les conditions gagnantes

Avant de mettre en œuvre le système, nous devons définir ce qui constitue une victoire dans votre jeu. Pour cet exemple, nous supposerons que le joueur gagne en collectant tous les objets requis dans le niveau. Vous pouvez modifier cela pour l'adapter à d'autres types de jeu, comme vaincre des ennemis ou atteindre un objectif.

2. Créer le gestionnaire de victoires

Le script WinManager gère la logique de vérification de la condition de victoire. Nous allons créer un système qui vérifie si le joueur a collecté tous les éléments nécessaires et, lorsque cela se produit, il déclenche un événement de victoire.

using UnityEngine;

public class WinManager : MonoBehaviour
{
    public int totalItems = 5; // Total number of items needed to win
    private int collectedItems = 0; // Counter for collected items

    // Call this method when the player collects an item
    public void CollectItem()
    {
        collectedItems++;
        Debug.Log("Item collected. " + collectedItems + "/" + totalItems);

        // Check if the player has collected all items
        if (collectedItems >= totalItems)
        {
            WinGame();
        }
    }

    // This method is called when the player wins
    private void WinGame()
    {
        Debug.Log("You win!");
        // Here you can add more win logic like displaying a UI or stopping the game
        // For example, load a win scene:
        // SceneManager.LoadScene("WinScene");
    }
}

Ce script WinManager garde une trace du nombre d'objets collectés par le joueur. Une fois que le joueur a collecté tous les objets (ou rempli la condition de victoire), la méthode WinGame() est appelée, affichant un simple message « Vous avez gagné ! ». Vous pouvez facilement étendre cela pour afficher un écran de victoire ou une transition vers une nouvelle scène.

3. Mise en place du système de collecte d'articles

Nous allons maintenant créer un système permettant au joueur de collecter des objets. Cela pourrait se faire en détectant quand le joueur entre en collision avec des objets à collectionner.

using UnityEngine;

public class CollectibleItem : MonoBehaviour
{
    public WinManager winManager;

    // When the player collides with the item, it is collected
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            winManager.CollectItem(); // Notify the WinManager
            Destroy(gameObject); // Remove the collected item from the scene
        }
    }
}

Ce script détecte lorsque le joueur entre en collision avec un objet et informe le WinManager que l'objet a été récupéré. Une fois l'objet récupéré, il est détruit de la scène.

4. Implémentation de l'interface utilisateur pour la condition de victoire

Il est important de faire savoir au joueur qu'il a gagné. Nous allons créer une interface utilisateur simple pour afficher un message lorsque le joueur récupère tous les objets.

  1. Créez un Canvas dans la scène (GameObject > UI > Canvas).
  2. Ajoutez un élément de texte au canevas pour afficher un message « Vous avez gagné ! ».
  3. Dans le script WinManager, référencez cet élément Texte et mettez à jour sa visibilité lorsque le joueur gagne.
using UnityEngine;
using UnityEngine.UI;

public class WinManager : MonoBehaviour
{
    public int totalItems = 5;
    private int collectedItems = 0;
    public Text winText; // Reference to the "You Win!" text UI

    public void CollectItem()
    {
        collectedItems++;
        Debug.Log("Item collected. " + collectedItems + "/" + totalItems);

        if (collectedItems >= totalItems)
        {
            WinGame();
        }
    }

    private void WinGame()
    {
        Debug.Log("You win!");
        winText.text = "You Win!"; // Show the win message
        winText.gameObject.SetActive(true); // Make the message visible
        Time.timeScale = 0; // Stop the game (optional)
    }
}

Dans le code ci-dessus, lorsque le joueur gagne, le composant texte winText est mis à jour pour afficher « Vous avez gagné ! » et le jeu est mis en pause à l'aide de Time.timeScale = 0;.

5. Tester la condition gagnante

Jouez au jeu et vérifiez si la condition de victoire se déclenche lorsque le joueur récupère tous les objets. Vous devriez voir le message « Vous avez gagné ! » sur l'écran et le jeu se mettra en pause. Si vous utilisez une transition de scène, vous pouvez également charger une nouvelle scène pour indiquer que le jeu est terminé.

Élargissement de la condition gagnante

Selon votre type de jeu, la condition gagnante peut être étendue pour inclure des facteurs supplémentaires:

  • Vaincre tous les ennemis d'un niveau.
  • Atteindre un endroit précis dans un délai imparti.
  • Accomplir une série de tâches ou d’objectifs.

Ces conditions peuvent être ajoutées de manière similaire en créant de nouveaux scripts ou en modifiant le WinManager pour tenir compte de différents scénarios.

Conclusion

Nous avons implémenté une condition de victoire simple dans Unity basée sur la collecte d'objets. Ce système est flexible et peut être facilement adapté à d'autres mécanismes de jeu. Avec l'ajout d'une interface utilisateur et d'un déroulement de jeu approprié, vous disposez désormais d'une structure de base pour déclencher des conditions de victoire dans votre jeu.