Erreur de code (Débutant)

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
KCN
Messages : 8
Inscription : 25 Oct 2022 18:58

Erreur de code (Débutant)

Message par KCN » 25 Oct 2022 19:19

Bonjours a tous
Alors voila je viens juste de me lance dans la création de jeux 3D , et j'ai eu 2 erreur que je n'arrive pas a régler si l'un ou l'une de vous peuvent m'aides sa serai avec grand plaisir : )
je suis sur Unity 2021.3.11f1 ( si sa peut aider )

Erreur :
NullReferenceException: Object reference not set to an instance of an object
Inventory.RefreshContent () (at Assets/Scripts/Inventory.cs:47)
Inventory.Start () (at Assets/Scripts/Inventory.cs:21)
Script :

Code : Tout sélectionner

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

public class Inventory : MonoBehaviour
{
    [SerializeField]
    private List<ItemData> content = new List<ItemData>();

    [SerializeField]
    private GameObject inventoryPanel;

    [SerializeField]
    private Transform inventorySlotsParent;

    const int InventorySize = 24;

    private void Start()
    {
        RefreshContent();//cs21
    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.I))
        {
            inventoryPanel.SetActive(!inventoryPanel.activeSelf);
        }
    }

    public void AddItem(ItemData item)
    {
        content.Add(item);
        RefreshContent();
    }

    public void CloseInventory()
    {
        inventoryPanel.SetActive(false);
    }

    private void RefreshContent()
    {
        for (int i = 0; i < content.Count; i++)
        {
            inventorySlotsParent.GetChild(i).GetChild(0).GetComponent<Image>().sprite = content[i].visual;//cs47
        }
    }

    public bool IsFull()
    {
        return InventorySize == content.Count;
    }
Dernière édition par KCN le 25 Oct 2022 20:17, édité 1 fois.

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

Re: Erreur de code (Débutant)

Message par Max » 25 Oct 2022 20:15

Bonsoir,

l'erreur signifie que tu as dans ton code une référence "null". En gros un objet qui n'a pas été initialisé ou dont la valeur n'a pas été affecté et est donc nulle.
La ligne 47 laisse à penser qu'il s'agit peut-être de inventorySlotsParent, qui ne semble pas initialisé dans le code que tu listes.
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

KCN
Messages : 8
Inscription : 25 Oct 2022 18:58

Re: Erreur de code (Débutant)

Message par KCN » 25 Oct 2022 20:20

Merci de ta réponse ,
Mais pourtant elle a était références au 3eme
[SerializeField]

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

Re: Erreur de code (Débutant)

Message par Max » 25 Oct 2022 20:28

KCN a écrit :
25 Oct 2022 20:20
Merci de ta réponse ,
Mais pourtant elle a était références au 3eme
[SerializeField]
oui, mais cette valeur est-elle assignée dans l'inspecteur ?
Si c'est le cas, alors c'est un des éléments de la ligne inventorySlotsParent.GetChild(i).GetChild(0).GetComponent<Image>().sprite = content[i].visual;
qui est dans ce cas de figure.
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

KCN
Messages : 8
Inscription : 25 Oct 2022 18:58

Re: Erreur de code (Débutant)

Message par KCN » 25 Oct 2022 20:36

Tous et bien assigner dans l'inspector

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: Erreur de code (Débutant)

Message par Moi 1971 » 26 Oct 2022 08:25

Bonjour, est-ce que "content" est bien renseignée?

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

Re: Erreur de code (Débutant)

Message par boubouk50 » 26 Oct 2022 09:21

Vue la ligne ça peut être plein de choses:
inventorySlotsParent > non-renseigné
.GetChild(i) -> Pas suffisamment d'enfant (niv1)
.GetChild(0) -> Pas de petit enfant (niv2) (chaque enfant (niv1) doit posséder au moins un enfant donc)
.GetComponent<Image>() -> Pas de component Image dans le premier petit enfant (niv2)
content -> Un des content n'est pas renseigné (trou dans le tableau)

Pour savoir lequel est incriminé, il te faut tester chacune de ces variables séparément.

Code : Tout sélectionner

if (maVar == null)
	Debug.LogWarning ("maVar est null");
"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
boubouk50
ModoGenereux
ModoGenereux
Messages : 6216
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Erreur de code (Débutant)

Message par boubouk50 » 26 Oct 2022 09:22

Vue la ligne ça peut être plein de choses:
inventorySlotsParent > non-renseigné
.GetChild(i) -> Pas suffisamment d'enfant (niv1)
.GetChild(0) -> Pas de petit enfant (niv2) (chaque enfant (niv1) doit posséder au moins un enfant donc)
.GetComponent<Image>() -> Pas de component Image dans le premier petit enfant (niv2)
content[ i ] -> Un des content n'est pas renseigné (trou dans le tableau)

Pour savoir lequel est incriminé, il te faut tester chacune de ces variables séparément.

Code : Tout sélectionner

if (maVar == null)
	Debug.LogWarning ("maVar est null");
"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

KCN
Messages : 8
Inscription : 25 Oct 2022 18:58

Re: Erreur de code (Débutant)

Message par KCN » 26 Oct 2022 12:32

Bonjour merci de ta réponse
Mais du coup comment je doit la placé ?

KCN
Messages : 8
Inscription : 25 Oct 2022 18:58

Re: Erreur de code (Débutant)

Message par KCN » 26 Oct 2022 12:34

Oui mon "Content" est bien renseigné

Répondre

Revenir vers « Scripting »