Tutoriel N°1 : Créer un menu pause simple avec Unity 3D

Dans ce premier tutoriel, je vais vous apprendre à créer un menu pause basique pour votre jeu dans unity 3D.
Le menu pause sera assez simple, il possèdera un bouton « Continuer » qui permettra de reprendre le jeu et le bouton « Quitter » qui permettra de quitter le jeu.

Une fois votre projet ouvert, créez un nouveau script C# et nommez le « MenuPause ».
Glissez et déposez ce script sur le GameObject « Main Camera » dans votre scène.
Maintenant vous pouvez ouvrir le script pour l’éditer.

La première chose qu’on va ajouter dans ce script est une variable booléen qui prend soit Vrai (True) soit Faux (False) comme valeur. Cela nous permettra de savoir si le jeu est en pause ou non.

using System.Linq;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MenuPause : MonoBehaviour
{
    private bool isPaused = false;
}

Ensuite, dans la méthode(ou fonction) Update nous allons ajouter une condition « if » qui contrôlera si le joueur appuis sur la touche « Echap ». Si c’est le cas alors la valeur de « isPaused » sera vrai, le jeu sera en pause. Si il appuis une deuxième fois, la valeur sera faux et le jeu reprendra son cours.

void Update ()
{
    if(Input.GetKeyDown(KeyCode.Escape))
        isPaused = !isPaused;
}

Vous remarquez l’écriture « isPaused = !isPaused ». Cela permet de faire une sorte d’interrupteur.
La valeur de « isPaused » devient le contraire de lui-même, si la valeur est Vrai alors elle deviendra Faux et inversement.

Nous allons maintenant ajouter une nouvelle condition « if », elle vérifiera si « isPaused » est vrai.
Si la condition est remplit alors le jeu ce met en pause.
Pour mettre le jeu en pause dans Unity, on utilise « Time.timeScale ». Ce dernier est l’échelle à laquelle le temps passe dans Unity. D’ailleurs il peut aussi être utilisé pour faire des ralentis. Sa valeur par défaut est 1, c’est-à-dire que le temps passe aussi vite que le temps réel. Si on modifie sa valeur à 0.5, le temps passera deux fois moins vite que le temps réel. Donc vous l’aurait compris, si sa valeur est à 0, le temps est arrêter.

void Update ()
{
    if(Input.GetKeyDown(KeyCode.Escape))
        isPaused = !isPaused;
        
    if(isPaused)
        Time.timeScale = 0f;
    else
        Time.timeScale = 1f;
}

Vous pouvez remarquer que je ne mets pas d’accolade après mes « if » car ils utilisent qu’une seul ligne.

Maintenant nous allons ajouter, en dessous la méthode Update, une nouvelle méthode appelée « OnGUI ».
Cette méthode fonctionne comme la fonction Update sauf que sa principale utilité est l’affichage du GUI de votre jeu. Elle est appelée à chaque image du jeu pour rafraichir le GUI.

Dans cette fonction, nous allons créer une nouvelle condition qui vérifiera « isPaused » comme dans la fonction Update mais cette fois elle affichera le GUI si la valeur du booléen est vrai.

A l’intérieur de cette condition, nous allons ajouter nos deux boutons a l’intérieur de condition « if » eux aussi, qui nous permettra de savoir si le bouton a été pressé ou non.

Notre position sera le centre de l’écran, pour avoir cette position il suffit de diviser par 2 la largeur de l’écran et de soustraire la largeur divisée par 2 du bouton puis faire la même chose avec la hauteur.

Le GUI.Button d’Unity prend en paramètre un « Rect », ce dernier prend en paramètre la position et la taille d’un bouton. Le bouton prend d’autre paramètre comme un string, ce paramètre nous servira grandement car il permettra d’écrire la valeur du string dans le bouton.
Voilà le code.

void OnGUI () 
{
    if(isPaused)
    {
        // Si on clique sur le bouton alors isPaused devient faux donc le jeu reprend
        if(GUI.Button(new Rect(Screen.width / 2 - 40, Screen.height / 2 - 20, 80, 40), "Continuer"))
        {
            isPaused = false;
        }
        // Si on clique sur le bouton alors on ferme completment le jeu ou on charge la scene Menu Principal
        // Dans le cas du bouton Quitter, il faut augmenter sa position Y pour qu'il soit plus bas.
        if(GUI.Button(new Rect(Screen.width / 2 - 40, Screen.height / 2 + 40, 80, 40), "Quitter"))
        {
            Application.Quit(); // Ferme le jeu
            Application.LoadLevel("Menu Principal"); // Charge le menu principal
        }
    }
}

Voilà le menu pause est à présent terminé. Il ne vous reste plus qu’à choisir ce que vous voulez entre quitter complètement le jeu ou charger votre menu principal. Il suffit de dé-commenté la ligne que vous ne voulez pas.

Lien de téléchargement du code source : https://www.dropbox.com/s/w75icpog51jn4yi/MenuPause.cs

Ré-upload de l’ancien blog.
Date du poste original : 14 juin 2014
Mise à jour le : 19 mars 2019

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *