Pour créer un niveau de mon jeu avec tous les éléments qui s'agencent dynamiquement, j'utilise un bon vieux système de tableau qui a la forme suivante :
private var myMap1 = [
0, 0, 11, 0,11,11, 8, 1, 2, 0, 0, 5, 0, 0, 2, 3, 4, 0, 0, 1,4, 5, 0, 1, 2, 3, 4,
0,11, 0,11, 0, 0, 0, 8, 2, 3, 0, 0, 0, 0, 2, 3, 4, 0, 0, 1,4, 5, 0, 1, 2, 3, 4,
0, 0, 0, 0, 4, 0, 4, 1, 4, 0, 0, 10, 0, 0, 2, 3, 4, 0, 0, 1,4, 5, 0, 1, 2, 3, 4,
0, 0, 0, 0, 0, 0, 0, 1, 2, 8, 0, 0, 10, 0, 2, 3, 4, 0, 0, 1,4, 5, 0, 1, 2, 3, 4,
0, 0, 0, 0, 0, 0, 0, 1, 2, 8, 0, 0, 0, 10, 2, 3, 4, 0, 0, 1,4, 5, 0, 1, 2, 3, 4
];
Chaque chiffre correspond à un élément du décor qui va être intégré dans le niveau. Par exemple :
Par exemple les 2 hamburgers correspondent au 2 "11" que l'on peut voir en partant de la gauche du tableau.
Ensuite un script parcours le tableau et fait le travail. Cependant, le tableau étant en dur dans le code, j'ai cherché un moyen de l'externaliser et heureusement tout est prévu. Je créé un fichier .txt que je place au niveau da ma structure de projet. Ensuite j'appelle le fichier comme suit :
import System.IO; // Je fait un appel des classes de lecture/écriture d'Unity
private var fileName = "level1.txt"; // Je définie l'emplacement du fichier, ici un lien relatif
function Start(){ // au démarrage du jeu
var sr = new StreamReader(Application.dataPath + "/" + fileName); // on créé un stream depuis l'application mère vers level1.txt
var fileContents = sr.ReadToEnd(); // Dans cette variable, on place le contenu du .txt
sr.Close(); // on stoppe le stream
var _chars= fileContents.Split(","[0]);// on enlève toutes les virgules, ce qui créé des blocs de chaines
var _array:Array=new Array(); // on créé un nouveau tableau
for (_char in _chars) { // on scanne la variable _chars et à chaque bloc de chaine...
_array.push(parseInt(_char )); // on place le bloc dans le tableau en transformant la chaine de caractères en entier numérique
}
//::::::::::::::::::::::::::::::::::::::::::::::::::::::
myMap=_array; // on retourne le tableau final
GoPanel(); // on lance le panneau d'intro
generateObjects(); // on génère le niveau
}
Ainsi, je peux changer et créer tous mes niveaux sans avoir besoin de recompiler l'application juste en modifiant le fichier.txt ou en en créant de nouveaux. Voilà une bonne technique de fainéant assez connue ;).