[DB-AL] NullRef lors d'un instantiate

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

[DB-AL] NullRef lors d'un instantiate

Message par Badfly » 22 Mai 2017 09:48

Bonjour à tous,

Voilà j'essais d'instancier un cube. Mais j'ai une erreur "NullReferenceException: Object reference not set to an instance of an object"
J'ai regardé plusieurs sujet sur internet, mais je ne trouve pas de solution à mon problème.

Voici mon code C# :

Code : Tout sélectionner

	 public Rigidbody projectile;
    	 public Transform origine;


	void Start () {
        Rigidbody instance;

        instance = Instantiate (projectile, origine.position, origine.rotation);
}
    
Merci d'avance :D

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6208
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] NullRef lors d'un instantiate

Message par boubouk50 » 22 Mai 2017 09:54

As-tu renseigné tes variables publiques projectile et origine dans l'Inspector?

NullReferenceException: Object reference not set to an instance of an object. Cette erreur est extrêmement récurrente, et comme elle te le dis clairement en anglais: Exception de référence nulle: L'objet référencé n'est pas renseigné. Une variable est donc vide/nulle. Ici, tu as 2 variables, donc c'est l'une des deux. L'erreur te donne la ligne en cause dans le script normalement.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

Re: [DB-AL] NullRef lors d'un instantiate

Message par Badfly » 22 Mai 2017 10:10

Quand tu dis les deux variables, tu fais référence au projectile et origine ? Elles sont publique, et je les renseigne directement via unity (drag and drop ) je sais pas si c'est clair :(

Et la ligne indiquée est bien celle de l'instantiate. J'ai recopier mot pour moi la doc Unity sur l'instantiate et ça fonctionne pas non plus, la même erreur. Donc après de longues heures d'acharnements à trouver réponse je me tourne vers vous :D

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6208
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] NullRef lors d'un instantiate

Message par boubouk50 » 22 Mai 2017 10:19

Badfly a écrit :Quand tu dis les deux variables, tu fais référence au projectile et origine ? Elles sont publique, et je les renseigne directement via unity (drag and drop ) je sais pas si c'est clair :(
C'est exactement ça, vérifie bien qu'elles soient affectées.

D'après la doc, tu as bien:

Code : Tout sélectionner

 Rigidbody clone;
 clone = Instantiate (projectile, transform.position, transform.rotation) as Rigidbody;
Mis à part le cast en RigidBody que tu ne fais pas, le code est bon. Ce ne peut être que projectile ou origine qui n'est pas affecté.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

Re: [DB-AL] NullRef lors d'un instantiate

Message par Badfly » 22 Mai 2017 10:32

Ils sont bien déclarer. Quand je met un Debug.Log (projectile.name) ou Debug.Log(origine.name) il m'affiche bien dans la console le nom des GameObject que je lui ai affecté dans l'inspector.

Une autre idée ? (Et j'ai rajouté le "as Rigidbody" :D)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6208
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] NullRef lors d'un instantiate

Message par boubouk50 » 22 Mai 2017 10:37

Euh... non. Peux-tu coller le message d'erreur en entier stp?
Peut-être le nom de variable instance est réservé, essaie un autre nom genre l_instance.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

Re: [DB-AL] NullRef lors d'un instantiate

Message par Badfly » 22 Mai 2017 10:40

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class shootCube : MonoBehaviour {

    public Rigidbody projectile;
    public Transform origine;

	// Use this for initialization
	void Start () {
        Debug.Log(projectile.name);
        Debug.Log(origine.name);
        Rigidbody l_instance;

        l_instance = Instantiate(projectile, origine.position, origine.rotation) as Rigidbody;
    }
	
	// Update is called once per frame
	void Update () {
        
    }

}
Erreur : NullreferenceException: Object reference not set to an instance of an object.
shootCube.Start () (at Assets/Scripts/shootCube.cs:12).

instance, l_instance, aucun changement. J'ai même essayé en l'appelant clone ... rien n'y fait.

(Petit point, je ne sais pas si cela peut influencer, mais le projectile en question est un prefab. Mais même si c'est un GameObject normal, cela ne change pas le message)

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6208
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: [DB-AL] NullRef lors d'un instantiate

Message par boubouk50 » 22 Mai 2017 10:59

Il faut que ce soit un Rigidbody, après dans un prefab ou non, je ne sais pas. On va tester.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class shootCube : MonoBehaviour {

    public Transform projectile;
    public Transform origine;

   // Use this for initialization
   void Start () {
        Debug.Log(projectile.name);
        Debug.Log(origine.name);
        
        Transform l_instance;
        Rigidbody r_instance;

        l_instance = Instantiate (projectile, origine.position, origine.rotation); //Instanciation du prefab
        r_instance = l_instance.GetComponentInChildren <Rigidbody> (); //Si tu as besoin de récupérer le Rigidbody
        //ou r_instance = l_instance.GetComponent <Rigidbody> (); si le rigidbody est sur le parent.
    }
}
Ici, tu instancie un Transform plutôt qu'un Rigidbody, ce qui semble plus juste pour un prefab.
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
simonj
Messages : 293
Inscription : 29 Nov 2015 20:47
Localisation : Lyon

Re: [DB-AL] NullRef lors d'un instantiate

Message par simonj » 22 Mai 2017 11:36

Salut,

Je m'incruste dans le post, mais si j'ai bien lut l'erreur c'est la ligne 12 du script shootCube qui pose problème, or la ligne 12 (Si je compte bien), c'est :

Code : Tout sélectionner

Debug.Log(origine.name);
Tu es bien sûr que dans l'inspecteur, ton champ origine contient bien un objet ? Car là ça serais plutôt ça l'erreur. Tu essayes d'accéder à un objet qui n'existe pas physiquement.

Badfly
Messages : 62
Inscription : 19 Mai 2017 14:46

Re: [DB-AL] NullRef lors d'un instantiate

Message par Badfly » 22 Mai 2017 11:39

Le même message d'erreur. Sauf que cette fois, il indique la ligne :

Code : Tout sélectionner

Debug.Log(projectile.name);
Cela peu venir que du fait que l'objet soit un prefab, il n'est pas encore "physiquement" là. Donc n'a pas de position pas de Transform ? C'est peu être tout à fait idiot ce que je dis ^^

Répondre

Revenir vers « (C#) CSharp »