J'ai un peu avancé sur mon projet en cours, et aimerais maintenant y ajouter un système de pathfinding A*. Mais je me retrouve bloqué au tout début de la démarche, lorsque j'essaie de créer un tableau de cubes (plus précisément, un tableau contenant des gameObject appelés mapSquare et auxquels sont attachés un plan Node chacun pour l'A*, puisque les mapSquare me serviront aussi pour autre chose.)
J'ai cherché un peu en copiant le message d'erreur sur Google de comprendre l'origine de l'erreur. Sans grand résultat jusqu'à présent. J'ai également cherché un tutoriel qui fait la même chose afin de m'y référer, et je me suis alors trouvé face à une situation étrange.
Voici la version code que j'ai utilisé à l'origine (les parties non concernées du code ont été effacées pour faciliter l'identification du problème) :
- Code: Tout sélectionner
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class InteractiveMap : MonoBehaviour {
public GameObject mapSquare;
public int Edge = 3;
public int gameAreaWidth = 5;
public int gameAreaLength = 5;
private List<GameObject> mapSquareStoring;
[...]
void Start () {
setGameArea();
[...]
}
void Update () {
}
void setGameArea(){
for(int i=0; i<gameAreaWidth*gameAreaLength; i++) {
Debug.Log(i);
GameObject anotherMapSquare = (GameObject)Instantiate(mapSquare);
anotherMapSquare.transform.position = new Vector3(i/gameAreaWidth*Edge, 0, i%gameAreaLength*Edge);
mapSquareStoring.Add(anotherMapSquare);
//mapSquareStoring.Enqueue(anotherMapSquare);
}
}
void spawnAnAnt(int antType, int order){
[...]
}
}
Dans cette situation, Debug.Log affiche 0, un mapSquare(clone) apparait dans la hierarchie, puis j'ai cette erreur :
NullReferenceException: Object reference not set to an instance of an object.
J'ai par la suite essayé de m'y prendre différemment en reprenant un code qui marchait dans l'un des tutos que j'avais fait précédemment.
- Code: Tout sélectionner
void setGameArea(){
for(int i=0; i<gameAreaWidth*gameAreaLength; i++) {
Debug.Log(i);
GameObject anotherMapSquare = (GameObject)Instantiate(mapSquare);
anotherMapSquare.transform.position = new Vector3(i/gameAreaWidth*Edge, 0, i%gameAreaLength*Edge);
//mapSquareStoring.Add(anotherMapSquare);
mapSquareStoring.Enqueue(anotherMapSquare);
}
L'erreur est alors toute autre est bien surprenante.
Type `System.Collections.Generic.List<UnityEngine.GameObject>' does not contain a definition for `Enqueue' and no extension method `Enqueue' of type `System.Collections.Generic.List<UnityEngine.GameObject>' could be found (are you missing a using directive or an assembly reference?)
Je suis alors immédiatement aller vérifier les références, et il se trouve que j'utilise les mêmes que le tuto en question
(using UnityEngine;
using System.Collections.Generic;)
Ce qui me perturbe quelque peu.
Aussi, puis-je me permettre de vous demander, outre l'aide concernant ce problème, qu'est-ce qui différencie .Add de .Enqueue et si l'un des deux vous semble plus approprié que l'autre dans ce contexte ?
