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▲
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▲
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.




