Implementing a Winning Condition in Unity

In many games, a clear winning condition is essential for determining when the player has succeeded. In this tutorial, we’ll implement a simple winning condition in Unity. This condition will check if the player meets certain criteria (e.g., collecting items, defeating enemies, or reaching a destination) and trigger a win state when those conditions are met.

1. Define Winning Conditions

Before implementing the system, we need to define what constitutes a win in your game. For this example, we’ll assume the player wins by collecting all required items in the level. You can modify this to suit other game types, like defeating enemies or completing an objective.

2. Create the Win Manager

The WinManager script will handle the logic for checking the win condition. We will create a system that checks if the player has collected all necessary items, and when that happens, it will trigger a win event.

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");
    }
}

This WinManager script keeps track of how many items the player has collected. Once the player collects all items (or meets the win condition), the WinGame() method is called, displaying a simple “You win!” message. You can easily extend this to show a win screen or transition to a new scene.

3. Setting Up the Item Collection System

Now, we’ll create a system to allow the player to collect items. This could be done by detecting when the player collides with collectible objects.

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
        }
    }
}

This script detects when the player collides with an item and informs the WinManager that the item has been collected. After the item is collected, it is destroyed from the scene.

4. Implementing the UI for the Win Condition

It's important to let the player know when they’ve won. We’ll create a simple UI to show a message when the player collects all the items.

  1. Create a Canvas in the scene (GameObject > UI > Canvas).
  2. Add a Text element to the canvas to display a "You Win!" message.
  3. In the WinManager script, reference this Text element and update its visibility when the player wins.
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)
    }
}

In the above code, when the player wins, the winText Text component is updated to display “You Win!” and the game is paused using Time.timeScale = 0;.

5. Testing the Winning Condition

Play the game and check if the win condition triggers when the player collects all the items. You should see the "You Win!" message on the screen, and the game will pause. If you’re using a scene transition, you can also load a new scene to indicate the game has ended.

Expanding the Winning Condition

Depending on your game type, the winning condition can be expanded to include additional factors:

  • Defeating all enemies in a level.
  • Reaching a specific location within a time limit.
  • Completing a series of tasks or objectives.

These conditions can be added in a similar way by creating new scripts or modifying the WinManager to account for different scenarios.

Conclusion

We implemented a simple winning condition in Unity based on collecting items. This system is flexible and can be easily adapted to other game mechanics. With the addition of a UI and proper game flow, you now have a basic structure to trigger win conditions in your game.

Links
Unity 6