Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] [Unity3D] NullReferenceExeption

    11 avril 2016 à 18:39:50

    Bonjour tout le monde, j'obtiens l'erreur suivante, NullReferenceException: Object reference not set to an instance of an object. Je sais déjà que le code incriminé est le "&& gameObject.name != Parent.name" dans la ligne du if(col.game...), cette erreur devrait apparaître si je n'avais pas initialisé la variable Parent, or celle-ci l'est quelques lignes plus haut. Cela fait un bon bout de temps que je m'arrache les cheveux à trouver une solution, pouvez vous m'aider ?

    NB: la définition "GetComponent().parent = null;" est ici pour empêcher le projectile de suivre les mouvements du parent, en d'autres termes, je me sers juste du parent de l'objet pour en créer une référence

     GameObject Parent;
     void Start()
     {
         Parent = GetComponent<Transform>().parent.gameObject;
         //On déclare le joueur "parent" du projectile
         GetComponent<Transform>().parent = null;
     }
     
     void OnCollisionEnter2D(Collision2D col)
     {
         if (col.gameObject.tag == "Player" && gameObject.name != Parent.name)
         {
             GameObject[] Players = GameObject.FindGameObjectsWithTag("Player");
             
             Debug.Log("Appel de la fonction d'inversion de position: " + Players[1].name + "" + Players[0].name);
             Library.InversePos(Players[1], Players[0]);
             Destroy(gameObject);
             
             
         }
     }


    Merci d'avance !

    -
    Edité par WilliamBenichou 11 avril 2016 à 18:42:29

    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2016 à 22:10:01

      Salut,

      Je ne suis pas un expert, mais voici ce que je checkerai si j'étais face à ce problème 

      • Tu es sûr que ligne 4 c'est pas plutôt : Parent = GetComponent<Transform>().parent;
      • ligne 6 : est-ce que cette ligne ne viendrait pas poser problème ? Peut être que Parent n'est qu'un pointeur vers cette variable ; et donc la modifier modifie aussi Parent ? (mon C# est rouillé)
      • ligne 11 : tu es sûr qu'il existe un attribut name non null pour Parent ? et pour ton gameObject ? tu es sûr aussi que tu peux y accéder par .name et pas par .getName() ?

      PS : j'ai fermé le topic que tu avais créé par accident en doublon sur l'autre forum

      • Partager sur Facebook
      • Partager sur Twitter
      Are you watching closely ?
        12 avril 2016 à 0:54:50

        Malheureusement, aucune de mes tentatives de modifications n'enlève l'erreur lors de l’exécution du code, cela ne l’empêche pas de fonctionner, mais je me refuse de publier un code incomplet.

        • "Tu es sûr que ligne 4 c'est pas plutôt : Parent = GetComponent<Transform>().parent; "
        Testé, problème non corrigé, dans les deux cas j'ai accès au nom du GameObject
        • "ligne 6 : est-ce que cette ligne ne viendrait pas poser problème ? Peut être que Parent n'est qu'un pointeur vers cette variable ; et donc la modifier modifie aussi Parent ? (mon C# est rouillé)"
        Même sans cette ligne, même problème, ce n'est donc pas un problème de pointeur
        • "ligne 11 : tu es sûr qu'il existe un attribut name non null pour Parent ? et pour ton gameObject ? tu es sûr aussi que tu peux y accéder par .name et pas par .getName() ?"
        Sûr et certain, l'objet parent invoque ce projectile, il est dans tout les cas déjà présent au lancement de ce script et possède un nom, ici "Player_1/2". Il n'existe pas de .getName() pour accéder au nom de l'objet.


        En conclusion le script marche bien, mais sort cette erreur systématiquement dans la console.

        Et merci d'avoir fermé ce topic ! 

        J'espère bientôt trouver la source de cette erreur qui dois comme toujours être toute bête o_O

        -
        Edité par WilliamBenichou 12 avril 2016 à 1:08:41

        • Partager sur Facebook
        • Partager sur Twitter
          12 avril 2016 à 10:42:25

          @Dwarliz : 

          • Sous Unity, avec ou sans le .gameObject, ça revient au même (je pense qu'il y a des surcharges de cast implicite dans tous les sens)
          • Ligne 4, tu fais pointer Parent vers le parent, ligne 6 : tu fous l'autre pointeur à 0. Dans aucun cas tu ne touches au contenu pointé. Donc non, ce n'est pas ça le problème
          • Même si name est null, tu n'as pas de NullReferenceException. De plus, sous Unity, on se base énormément sur des champs publics et non sur des propriétés (je ne sais pas pourquoi. Peut-être que Mono ne fait pas d'inlining sur les propriétés ?)

          @WilliamBenichou :

          A première vue, ce code devrait marcher. Tu devrais mettre des points d'arrêt au niveau de ton script pour vérifier les valeurs de chacune de tes variables à différents endroits de ton script.

          • Partager sur Facebook
          • Partager sur Twitter
          Il y a 2 types de personnes : celles qui sont capables d'extrapoler à partir de données incomplètes.

          [C#] [Unity3D] NullReferenceExeption

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown