RETOUR AU SITE UNITY3D-FRANCE Forum Unity3D-France • Afficher le sujet - [résolu] C# Difficulté à la mise en place d'une liste

[résolu] C# Difficulté à la mise en place d'une liste

[résolu] C# Difficulté à la mise en place d'une liste

Messagepar 2Nails » 04 Aoû 2012, 06:45

Rebonjour !

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 ?
Dernière édition par 2Nails le 05 Aoû 2012, 07:19, édité 3 fois.
2Nails
 
Messages: 8
Inscription: 24 Juil 2012, 16:10

Re: Il y en aura d'autres, je le crains.

Messagepar mel68 » 04 Aoû 2012, 14:33

il me semble que pour faire de l'A* il faaut unity pro ce qui pourrai expliquer tom probleme :?
mon site internet (c'est mon premier soyez indulgent :) ) :

http://melgames-prods.jimdo.com/
mel68
 
Messages: 670
Inscription: 04 Fév 2012, 14:57

Re: Difficulté à la mise en place d'un tableau de GameObject

Messagepar 2Nails » 04 Aoû 2012, 15:00

Je n'en suis pourtant qu'au tout début :/

Pour le moment ça ne ressemble encore pas vraiment à de l'A*, j'essaie juste de générer des cubes en lignes successives.
Dernière édition par 2Nails le 05 Aoû 2012, 04:23, édité 1 fois.
2Nails
 
Messages: 8
Inscription: 24 Juil 2012, 16:10

Re: Il y en aura d'autres, je le crains.

Messagepar ZJP » 04 Aoû 2012, 17:06

Bien que le titre de ce sujet ("Il y en aura d'autres, je le crains.") soit dans la droite ligne du précédent intitulé "Une erreur, déjà" , ceci n'est pas un concours de littérature. A ce rythme, le prochain pourrait être "Vous étiez prévenu..".
Prière donc, de rectifier ces DEUX titres de façon a présenter le problème suivant les règles de la Netiquette.
Par exemple "[C#] Pathfinding A* - soucis avec un tableau de gameObjets".

Merci.


JP
********** Nétiquette du forum *********
J'ai un projet qui "déchire" tout. La compile !!!"
Pas de MP, sauf pour les sujets liés à la Modération.
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Moon[s] 20.62 ( W.I.P )
Avatar de l’utilisateur
ZJP
 
Messages: 2833
Inscription: 15 Déc 2009, 06:00
Localisation: GMT -4/-5

Re: Il y en aura d'autres, je le crains.

Messagepar cayou66 » 04 Aoû 2012, 20:15

Code: Tout sélectionner
mapSquareStoring.Enqueue(anotherMapSquare);

n'existe pas, l'erreur est claire.
Peut être que Add pourrait faire l'affaire.
-===Creative lifestyle===-
Visitez mon site ! http://www.cayou-prod.com
Tutoriels GUI d'Unity (entre autres): http://cayou-prod.com/?cat=8&lang=fr
GMT-05 (Canada/USA Est)
N-G-U-I
Avatar de l’utilisateur
cayou66
 
Messages: 4658
Inscription: 30 Juin 2011, 14:45
Localisation: Montréal

Re: Il y en aura d'autres, je le crains.

Messagepar yoyoyaya » 04 Aoû 2012, 21:33

ZJP a écrit:Bien que le titre de ce sujet ("Il y en aura d'autres, je le crains.") soit dans la droite ligne du précédent intitulé "Une erreur, déjà" , ceci n'est pas un concours de littérature. A ce rythme, le prochain pourrait être "Vous étiez prévenu..".
Prière donc, de rectifier ces DEUX titres de façon a présenter le problème suivant les règles de la Netiquette.
Par exemple "[C#] Pathfinding A* - soucis avec un tableau de gameObjets".

Merci.


JP


"Il y en aura d'autres, je le crains."
jp, je pensais que c'était une phrase "ras le bol" de ta part. En réponse à un titre foireux ou autre.
(non non, tu n'es pas perçut comme un grand méchant modo sadique et tortionnaire) :mrgreen:

yoyo
Avatar de l’utilisateur
yoyoyaya
 
Messages: 978
Inscription: 30 Mai 2011, 13:14
Localisation: PAAAAARTOUUUU

Re: Il y en aura d'autres, je le crains.

Messagepar ZJP » 04 Aoû 2012, 21:54

:D
********** Nétiquette du forum *********
J'ai un projet qui "déchire" tout. La compile !!!"
Pas de MP, sauf pour les sujets liés à la Modération.
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
Moon[s] 20.62 ( W.I.P )
Avatar de l’utilisateur
ZJP
 
Messages: 2833
Inscription: 15 Déc 2009, 06:00
Localisation: GMT -4/-5

Re: Difficulté à la mise en place d'un tableau de GameObject

Messagepar 2Nails » 05 Aoû 2012, 04:04

Et bien, je suis désolé, et je reconnais avoir quelque peu survolé la page en question. Pourtant, c'est en très gros et souligné, j'ai vraiment gaffé. Je corrige les deux titres de suite.

Code: Tout sélectionner
mapSquareStoring.Enqueue(anotherMapSquare);

n'existe pas, l'erreur est claire.
Peut être que Add pourrait faire l'affaire.


Pourtant, j'ai déjà utilisé cette fonction dans un tuto, qui fonctionnait très bien.

(Ce code là)

Code: Tout sélectionner
void Start () {
      objectQueue = new Queue<Transform>(numberOfObjects);
      nextPosition = transform.localPosition;
      for(int i = 0; i < numberOfObjects; i++){
         Transform o = (Transform)Instantiate(prefab);
         o.localPosition = nextPosition;
         nextPosition.x += o.localScale.x;
         objectQueue.Enqueue(o);
      }
2Nails
 
Messages: 8
Inscription: 24 Juil 2012, 16:10

Re: C# Difficulté à la mise en place d'un tableau de GameObj

Messagepar cayou66 » 05 Aoû 2012, 05:03

Tu dois pas être très fort aux jeux des 7 erreurs, ou en code, ou les deux.

Dans le 1er exemple tu te sers (ou tu recopies sans rien comprendre) une List

Alors que dans le dernier exemple, tu utilises (ou...enfin je me suis fait comprendre...) une Queue
Queue a bien la fonction, mais List utilise la fonction Add pour ajouter des éléments dans une liste.

Bon sang, tu saurais ce que ce code veut dire, cette question et tout ce thread n'existerai pas. On est pas là pour faire du parseur de code pour des gens qui font des copier-coller sans même chercher à comprendre.

La coupe est pleine.
-===Creative lifestyle===-
Visitez mon site ! http://www.cayou-prod.com
Tutoriels GUI d'Unity (entre autres): http://cayou-prod.com/?cat=8&lang=fr
GMT-05 (Canada/USA Est)
N-G-U-I
Avatar de l’utilisateur
cayou66
 
Messages: 4658
Inscription: 30 Juin 2011, 14:45
Localisation: Montréal

Re: C# Difficulté à la mise en place d'un tableau de GameObj

Messagepar 2Nails » 05 Aoû 2012, 06:26

J'essaie de comprendre. Il se trouve que la mise en forme de Queue et de List est très similaire, j'ai pensé qu'un nom différent avait été choisi par le codeur mais qu'il s'agissait de la même fonctionnalité.

En outre, s'il se trouve qu'effectivement je peux être amené à copier des bouts codes qui marche, j'essaie toujours de comprendre pourquoi. Je ne suis pas de mauvaise volonté, je reconnais être peut-être nul en code du fait qu'il m'est toujours difficile de me concentrer, mais je vais essayer de faire de mon mieux. A priori, même si je galère à apprendre, vous ne devriez pas avoir besoin de me répéter quoi que ce soit. J'ai bien saisi ou j'avais merdé pour la Queue et la List, à savoir que je n'ai pas du tout déclaré la même chose.

Du coup, ma question concernant la différence entre Add et Enqueue se résous un peu d'elle-même, je dois aller me documenter sur les deux fonctionnalités.

EDIT : je viens de comprendre comment je me suis embrouillé. Le tuto en question donne le contenu de son code, que je me suis efforcé de commenter et de comprendre par moi-même. Mais n'ayant jamais vu de Queue auparavant, j'ai fait l'erreur de l'assoscier à une liste. A aucun moment je n'ai eu l'occasion de me rendre compte de mon erreur, jusqu'à présent. Ca fonctionne effectivement de façon différente, et je pense qu'utiliser une liste sera plus approprié (en outre, je les connais à priori mieux.)

Je vais essayer de me débrouiller tout seul pour régler le problème avec une List, comme initialement prévu, j'ai pas envie de vous déranger plus.

EDIT 2 : c'est réglé, la déclaration de la liste était incomplète. je vous remercie d'avoir pointé du doigt la confusion avec Enqueue, je partais completement dans la mauvaise direction
2Nails
 
Messages: 8
Inscription: 24 Juil 2012, 16:10

Suivante

Retourner vers Scripting Javascript, C# et Boo

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités