How to Restart a Game in Unity

Restarting a game is a common feature in Unity games, allowing players to reset the game state and start over. This is useful in scenarios such as game over screens, level retries, or practice runs. In Unity, restarting a game is typically done by reloading the current scene, which resets all objects and variables to their default states. In this tutorial, we will learn how to implement a game restart feature using Unity’s scene management system.

Step 1: Setting Up the Scene

Let’s begin by creating a simple Unity scene:

  1. Create a new Unity project.
  2. Add a 3D object (e.g., a Cube) to represent a player or game element.
  3. Set up some gameplay elements, such as obstacles or collectible items.
  4. Save the scene by going to File > Save As and giving it a name like MainScene.

Step 2: Importing Scene Management

Unity’s SceneManager is used to handle scene loading and reloading. To use it, we need to include the UnityEngine.SceneManagement namespace in our scripts.

Step 3: Writing the Restart Script

Next, create a script that reloads the current scene:

  1. In the Assets folder, right-click and select Create > C# Script. Name it RestartGame.
  2. Open the script in your code editor and add the following code:
using UnityEngine;
using UnityEngine.SceneManagement;

public class RestartGame : MonoBehaviour
{
    void Update()
    {
        // Check if the player presses the R key to restart the game
        if (Input.GetKeyDown(KeyCode.R))
        {
            RestartCurrentScene();
        }
    }

    // Method to restart the current scene
    public void RestartCurrentScene()
    {
        Scene currentScene = SceneManager.GetActiveScene(); // Get the current scene
        SceneManager.LoadScene(currentScene.name); // Reload the scene by its name
    }
}

Step 4: Adding the Restart Script to an Object

To make the script functional:

  1. Attach the RestartGame script to a GameObject in the scene (e.g., an empty GameObject).
  2. Save the scene and press Play. During gameplay, press the R key to restart the scene.

Step 5: Adding a Restart Button

For games with UI, you can add a button to restart the game:

  1. In the Hierarchy, right-click and select UI > Button to add a button to your scene.
  2. Customize the button text to say "Restart" by selecting the child Text object and changing its content in the Inspector.
  3. Attach the restart script to a GameObject in the scene if you haven’t already.
  4. Select the button in the Hierarchy, go to the OnClick section in the Button component, and click the + icon.
  5. Drag the GameObject with the RestartGame script into the empty field.
  6. In the dropdown menu, select RestartGame > RestartCurrentScene.

Now, clicking the button during gameplay will restart the game.

Optional: Resetting Player Progress

If your game tracks player progress (e.g., score or health), ensure these values reset when the game restarts. For example:

using UnityEngine;

public class Player : MonoBehaviour
{
    public int score = 0;
    public int health = 100;

    void Start()
    {
        // Reset score and health on game start
        score = 0;
        health = 100;
    }
}

Make sure any variables that need to reset are initialized in the Start method or the appropriate place in your scripts.

Testing the Restart Feature

To test your restart feature:

  1. Play the scene and interact with the game elements (e.g., move the player, collect items, or lose health).
  2. Press the R key or click the restart button to reset the scene.
  3. Verify that the scene resets to its initial state, including all variables and objects.

Optional Enhancements

Here are some additional ideas to enhance your restart feature:

  • Game Over Screen: Display a game over screen with a restart option when the player loses.
  • Level Selection: Provide options to restart the current level or return to a main menu.
  • Save and Load: Integrate save and load functionality to preserve player progress across restarts.
  • Confirmation Dialog: Add a confirmation dialog before restarting to prevent accidental restarts.

Conclusion

We've implemented a restart feature in Unity using the SceneManager. This functionality allows players to reset the game easily, making it a fundamental feature for any game. Experiment with UI buttons, custom scripts, and player progress resets to refine your game restart system further.

Links
Unity 6