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.