[DB-AL] GameObject soit disant détruit

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
RollingCorn
Messages : 4
Inscription : 12 Déc 2019 02:15

[DB-AL] GameObject soit disant détruit

Message par RollingCorn » 16 Déc 2019 22:38

Bonjour à toutes et tous,

Je coince sur un truc sans doute bête...
Un panneau UI doit s'afficher après l’exécution d'un script. mais ne le fait pas sous prétexte que:
MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
Your script should either check if it is null or you should not destroy the object.

Lorsque je lance la séquence qui appelle Reward() après avoir chargé directement ma scène, ça fonctionne.
Mais après être repassé par le menu principal et avoir rechargé la scène (nouveau jeu ou sauvegarde), ça coince.
La touche "R" fonctionne par contre bien et fait toujours bien apparaître ou disparaître mon écran UI, peu importe que je sois repassé par le menu ou non!
Alors, pourquoi mon GameObject existe quand j'utilise la touche "R" et pas quand j'appelle la fonction Reward()???

Une idée me serait la bienvenue ;-)

Merci d'avance pour votre temps.

Code : Tout sélectionner

using UnityEngine;

public class RewardScreen : MonoBehaviour
{
    public GameObject ui;
   
    #region Singleton
    public static RewardScreen instance;

    private void Awake()
    {
        if (instance != null)
        {
            Debug.LogError("il y a déjà un RS dans scène");
            return;
        }
        instance = this;
    }
    #endregion

    public void Update()
    {
        if (Input.GetKeyDown(KeyCode.R)) //Permet de tester que "Toggle" fonctionne s'active et se désactive et ça fonctionne
        {
            Toggle();
        }
        
    }

    public  void Reward() //Appelé depuis un autre script.
    {        
        PlayerStats.bonus += 50; //Bien ajouté
        Toggle();              
    }   

    public void Toggle() //Aussi appelé depuis un bouton  "CONTINUE" dans le "rewardUI" et ça fonctionne.
    {
        ui.SetActive(!ui.activeSelf); //ça coince ici quand la fonction est appelée depuis Reward()...

        if (ui.activeSelf)
        {
            Time.timeScale = 0f;
        }
        else
        {
            Time.timeScale = 1f;
        }
    }    
}

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

Re: [DB-AL] GameObject soit disant détruit

Message par boubouk50 » 17 Déc 2019 09:19

Salut,
le message est plutôt explicite: un objet est détruit et tu essaies encore d'y accéder.
Pourtant dans le code que tu nous présentes, il n'y a pas de destruction de gameObject. Tu dois donc avoir un autre script qui détruit un gameObject.
Dans ton code erreur, tu dois avoir le script en question et la ligne d'accès, ça te permet de savoir quel objet est détruit.
"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

RollingCorn
Messages : 4
Inscription : 12 Déc 2019 02:15

Re: [DB-AL] GameObject soit disant détruit

Message par RollingCorn » 17 Déc 2019 12:14

Salut.
Merci pour ta réponse.
Le code erreur me renvoie dans le script ci-dessus à la ligne: ui.SetActive(!ui.activeSelf);
Je n'ai pas de script qui détruit mon objet ui et il reste toujours présent dans la hiérarchie!
Pour preuve, au même moment ça fonctionne avec la touche "R"!
Je suis perdu... à l'aide!

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

Re: [DB-AL] GameObject soit disant détruit

Message par boubouk50 » 17 Déc 2019 12:19

Tout cela semble bien étrange, effectivement.
Détruis-tu des objets dans ta scène? Notamment un qui pourrait appeler la fonction Toggle? Un bouton qu perd une référence? ou autre?
Du côté de PlayerStats?
"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

RollingCorn
Messages : 4
Inscription : 12 Déc 2019 02:15

Re: [DB-AL] GameObject soit disant détruit

Message par RollingCorn » 17 Déc 2019 13:15

Pas de destruction dans PlayerStats, c'est juste un stockage de données.
Il y a bien la destructions des ennemis morts mais les scripts ennemis et RewardScreen ne sont pas liés. Mon reward UI fonctionne comme mon menu de pause. Ils sont tous 2 dans la scène mais invisibles et s'activent à la demande. Sauf dans le cas énoncé avant.
Ma fonction Reward est appelée depuis un script "unity ads". Est-ce ça qui coince ?
Autre truc bizarre, c'est que quand le UI ne s'affiche pas, le script ajoute 100 points bonus au lieu de 50 !?
J'en deviens fou :snif:

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

Re: [DB-AL] GameObject soit disant détruit

Message par boubouk50 » 17 Déc 2019 14:06

S'il ajoute 100, c'est qu'il ajoute 2x50, à mon avis.
Il va te falloir déboguer les appels depuis UnityAds, il se peut qu'il fasse des choses imprévues.
"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

RollingCorn
Messages : 4
Inscription : 12 Déc 2019 02:15

Re: [DB-AL] GameObject soit disant détruit

Message par RollingCorn » 17 Déc 2019 15:31

C'est ce que je pensais... Je vais tenter de faire la même opération depuis un autre script pour voir, et continuer à essayer différentes choses...
Encore quelques heures perdues à chercher 🙄

Répondre

Revenir vers « (C#) CSharp »