Unity - Roguelike 2D

Gestionnaire de jeu

L'auteur

Site personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Le projet présenté dans cette série est tout aussi bien compatible avec Unity 4.6 qu'avec Unity 5.
Vous pouvez retrouver les autres épisodes de cette série dans le sommaire dédié.

II. Vidéo


Unity - Roguelike 2D - Gestionnaire de jeu


III. Résumé

Ce chapitre vous guide dans la création du script gérant le jeu. C'est ce script qui, notamment, appellera le script BoardManager.cs vu dans la vidéo précédente pour créer le niveau.

III-A. GameManager.cs

Le script GameManager.cs permet de lancer le jeu et de générer le niveau en utilisant les fonctions du script BoardManager.cs.
De plus, le GameManager implémente un patron de conception « singleton » faisant qu'il ne peut y avoir qu'une et une seule instance de l'objet l'implémentant. Pour l'implémenter, il faut :

  • définir une variable publique et statique de l'objet, initialisée à null ;
  • dans la fonction Awake(), effectuer un test pour savoir si la variable est à null :

    • si c'est le cas, la variable est assignée à l'instance courante (this),
    • sinon la variable est détruite, s'assurant ainsi qu'il n'y a pas de seconde instance de l'objet.

Pour assigner plusieurs tuiles dans un des composants de l'inspecteur, vous pouvez verrouiller l'inspecteur afin qu'il ne perde pas le focus lors du glisser/déposer des tuiles.

Pour centrer la caméra sur le niveau généré, celle-ci est placée en (3.5, 3.5). De plus, le fond est changé en noir.

Un préfabriqué est créé à partir du script GameManager.cs.

III-A-1. Script

 
Sélectionnez
using UnityEngine;
using System.Collections;

namespace Completed
{
    using System.Collections.Generic;       // Nous permet d'utiliser les listes. 
    
    public class GameManager : MonoBehaviour
    {

        public static GameManager instance = null;              // Instance statique de GameManager qui permet d'y accéder par les autres scripts.
        private BoardManager boardScript;                       // Contient une référence vers notre BoardManager qui définira le niveau.
        private int level = 3;                                  // Niveau actuel, affiché dans le jeu comme "Day 1".

        // Awake est toujours appelé avant les fonctions Start
        void Awake()
        {
            // Vérifie si l'instance existe déjà
            if (instance == null)
                
                // Si ce n'est pas le cas, définit l'instance à celle-ci
                instance = this;
            
            // Si l'instance existe déjà et que ce n'est pas celle-ci :
            else if (instance != this)
                
                // Alors détruit celle-ci. Cela applique le pattern Singleton, signifiant que nous ne pouvons avoir qu'une et seulement une instance de GameManager.
                Destroy(gameObject);    
            
            // Définit cette instance pour ne pas être détruite au rechargement de la scène
            DontDestroyOnLoad(gameObject);
            
            // Récupérer une référence du script BoardManager attaché
            boardScript = GetComponent<BoardManager>();
            
            // Appelle la fonction InitGame pour initialiser le premier niveau 
            InitGame();
        }
        
        // Initialise le jeu pour chaque niveau.
        void InitGame()
        {
            // Appelle la fonction SetupScene du script BoardManager et lui passe le niveau actuel.
            boardScript.SetupScene(level);
            
        }
        
        
        
        // Update est appelé à chaque image.
        void Update()
        {
            
        }
}

III-B. Loader.cs

Ce second script permet de charger le GameManager au démarrage du jeu.

Le script est ajouté à la camera et le préfabriqué du GameManger lui est assigné.

III-B-1. Script

 
Sélectionnez
using UnityEngine;
using System.Collections;

namespace Completed
{   
    public class Loader : MonoBehaviour 
    {
        public GameObject gameManager;          // Préfabriqué du GameManager à instancier.
        public GameObject soundManager;         // Préfabriqué du SoundManager à instancier.
        
        
        void Awake ()
        {
            // Vérifie si une instance de GameManager a déjà été assignée
            if (GameManager.instance == null)
                
                //Instantiate gameManager prefab
                Instantiate(gameManager);
            
            // Vérifie si une instance de SoundManager a déjà été assignée
            if (SoundManager.instance == null)
                
                //Instantiate SoundManager prefab
                Instantiate(soundManager);
        }
    }
}

IV. Ressources

Vous pouvez télécharger les ressources pour ce projet sur l'Asset Store de Unity.

V. Commenter

Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2015 Unity Technologies. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.