Problème d'attribution d'un GameObject

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Répondre
Pimclik
Messages : 9
Inscription : 05 Mars 2021 22:05

Problème d'attribution d'un GameObject

Message par Pimclik » 06 Mars 2021 08:37

Bonjour tous le monde et merci pour le forum,

je débute en c# et je ne comprends pas l'erreur de mon script qui me retourne ce code dans la console:
"NullReferenceException: Object reference not set to an instance of an object"

Le script MouseSensitive est attaché à plusieurs preFab et appel la fonction MouseGestion pour stocker en mémoire le dernier gameObject selectionné.

Avez-vous une idée du problème ? (mis à part mon incompétence ? :-D )

Code : Tout sélectionner

 
public class MouseSensitive : MonoBehaviour
{

    private MouseGestion mouse;

private void OnMouseDown()
    {
        mouse.setSelectedObject(this.gameObject);
    }

}
   

Code : Tout sélectionner


public class MouseGestion : MonoBehaviour
{

public GameObject objectSelected = new GameObject();

    public void setSelectedObject(GameObject newObject)
    {
        objectSelected = newObject;
    }

}

Merci :-)
Dernière édition par Pimclik le 06 Mars 2021 12:49, édité 2 fois.

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Problème d'attribution d'un GameObject

Message par Max » 06 Mars 2021 10:40

Bonjour,

je pense qu'il te manque pas mal de bases, que ce soit au niveau d'Unity ou encore au niveau du C#.
Le message d'erreur te dit que la donnée mouse est 'null' et donc ne possède pas de référence.
Au vu des scripts que tu donnes, elle n'est jamais initialisé de quelque manière qu'il soit.
Là en fait tu demandes à MouseSensitive de travailler sur une référence qu'il ne possède pas.
Il faut que pour chaque instance de MouseSensitive il y ai une récupération de la référence de l'instance MouseGestion, script qui doit être certainement affecté à un GameObject de ta scène.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Pimclik
Messages : 9
Inscription : 05 Mars 2021 22:05

Re: Problème d'attribution d'un GameObject

Message par Pimclik » 06 Mars 2021 12:45

Oups oui, j'ai oublié de copier le paramètre this.gameObject sur le forum (il se trouve dans mon code, mais ne fonctionne pas)
je vais éditer mon 1er message.

Code : Tout sélectionner

 
private void OnMouseDown()
    {
        mouse.setSelectedObject(this.gameObject);
    }
Merci pour ton retour Max

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Problème d'attribution d'un GameObject

Message par Max » 06 Mars 2021 13:16

Oui certes, mais cela ne change rien au fond du problème. Le paramètre mouse dans ta classe MouseSensitive reste à null.
Relis mon précédent message.
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Pimclik
Messages : 9
Inscription : 05 Mars 2021 22:05

Re: Problème d'attribution d'un GameObject

Message par Pimclik » 06 Mars 2021 13:28

Oui c'est là que je bug et que je ne comprends pas...
Car avec

Code : Tout sélectionner

 Debug.log("vous avez cliqué sur" + this.gameobject);
 
La console m'affiche bien le GameObject... du coup le this.gameObject est sensé ne pas être null.

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: Problème d'attribution d'un GameObject

Message par jmhoubre » 06 Mars 2021 13:31

this représente l'objet en cours, il peut difficilement être null.

Quand tu déclares

Code : Tout sélectionner

private MouseGestion mouse;
mouse est à null. A aucun moment, dans ce que tu publies, tu ne changes sa valeur. Quand tu essaies d'y accéder, cela déclenche une null reference error.

Tu devrais utiliser Awake() ou Start() pour initialiser cette variable.

Code : Tout sélectionner

private void Awake ()
{
	mouse = thise.gameObject;
}
Je te conseille également de parcourir ce sujet (qui porte un nom assez peu explicite), tu y trouveras des pistes pour progresser.

Pimclik
Messages : 9
Inscription : 05 Mars 2021 22:05

Re: Problème d'attribution d'un GameObject

Message par Pimclik » 06 Mars 2021 14:16

Ok merci Max et jmhoubre c'est résolu:

il fallait effectivement déclarer la mouse dans une fonction Start() ou Awake() en
mouse =new MouseGestion();

Code : Tout sélectionner

  private MouseGestion mouse;
   public void Awake()
    {
       mouse = new MouseGestion();
    }
J'avais essayé à la base comme ça mais ça ne fonctionnait pas:

Code : Tout sélectionner

  private MouseGestion mouse = new MouseGestion();;
J'aurais appris qu'il faut les déclarer dans une fonction, ce qui est plutôt logique.

Encore merci :-)

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Problème d'attribution d'un GameObject

Message par Max » 06 Mars 2021 14:23

Tu ne peut pas instancier par le biais d'un New une classe dérivant de MonoBehaviour.
Donc quand tu écris mouse = new MouseGestion();, cela ne peut pas fonctionner correctement. D'ailleurs dans la console, tu dois avoir un warning à ce sujet.
Pour récupérer l'instance de ce script, tu dois par exemple passer par un GetComponent<MouseGestion>().
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Pimclik
Messages : 9
Inscription : 05 Mars 2021 22:05

Re: Problème d'attribution d'un GameObject

Message par Pimclik » 06 Mars 2021 16:43

Effectivement ça ne marche pas non plus avec le new... Car du coup tous les GameObject sont sauvé dans un script différents...

Les prefabs liés au script MouseSensitive sont instancié via un script de démarrage, et pour ceux là, le code ne marche pas.

Par contre si je mets les prefabs manuellement dans la scène et que je glisse/depose l'empty contenant MouseGestion dans les variables des prefab de la scène le code marche nickel.

Le problème c'est que c'est impossible de glisser/déposer le script MouseGestion dans un prefab qui n'est pas en scène... est-il possible de le faire via le script ?

Avatar de l’utilisateur
Max
Messages : 8771
Inscription : 30 Juil 2011 13:57
Contact :

Re: Problème d'attribution d'un GameObject

Message par Max » 06 Mars 2021 16:49

Ton script MouseGestion est où ? Sur un GameObject de ta scène ?
Est-il instancié quelque part ?
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Scripting »