Problème lors du rechargement de la scène

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Problème lors du rechargement de la scène

Message par wesh57 » 08 Mars 2020 00:14

Bonjour,
Voilà, j'ai un object player et quand il est mort je veux recharger la scène pour recommencer le jeu.
Or j'ai un souci lorsque je recharge la scène, il me met par exemple cette erreur si (d'autre erreur son possible quand je fais d'autre action)
MissingReferenceException: The object of type 'MovePlayer' 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.
Donc je n'arrive plus à bouger mon perso

Voici les bouts de code :

Code : Tout sélectionner

 public void Restart()
    {
        SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
    }

Code : Tout sélectionner

void Right()
    {
        transform.position += Vector3.right;
        posPlayer++;
    }

    void Left()
    {
        transform.position += Vector3.left;
        posPlayer--;
    }
Je n'arrive pas à comprendre pourquoi je n'arrive plus à bouger mon perso, alors que tout le reste semble être bon :pasdrole:

Avatar de l’utilisateur
Aelhan
Messages : 124
Inscription : 11 Déc 2019 23:00

Re: Problème lors du rechargement de la scène

Message par Aelhan » 08 Mars 2020 07:41

A priori tu dois avoir dans ton script MovePlayer une ligne Destroy(this); qui détruit non pas l'objet auquel est rattaché le script, mais le component MovePlayer, donc le script n'y est plus rattaché.
Ce serait plutôt un Destroy(gameObject); qu'il faudrait mettre.
Celui qui pose une question risque cinq minutes d'avoir l'air bête.
Celui qui ne pose pas de question restera bête toute sa vie.

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

Re: Problème lors du rechargement de la scène

Message par Max » 08 Mars 2020 15:59

Bonjour,

c'est surprenant, normalement lors d'un chargement (ou rechargement) de la scène, l'ensemble des éléments reprends son état initial (donc par exemple les éléments désactivés en runtime retrouvent normalement leur état actif).
Après, tout dépend comment est gérée ta scène. Possède-t-elle (comme le player) des GameObjects en 'mode' DontDestroyOnLoad ?
Au niveau de l'inspector de ton player, sur lequel est visiblement positionné le script MovePlayer.cs, tu devrais pouvoir voir si effectivement le script existe toujours, ou si il est désactivé.
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

wesh57
Messages : 22
Inscription : 19 Jan 2020 04:33

Re: Problème lors du rechargement de la scène

Message par wesh57 » 09 Mars 2020 00:04

Bonjour,
Alors déjà merci pour vos réponses.
Déjà pour Aelhan, toutes mes scriptes (ni dans MovePlayer) ne possède pas de Destroy(), en tout cas pour mon Player.
Et pour Max, oui le scripte existe toujours lorsque je recharge la scène.

Et aussi je viens de voir quelque chose qui pourrait être utile, voilà, pour mon perso j'ai aussi deux modules de saute et pour se baisser, or j'ai remarqué que quand j’exécute l'une de ces deux fonctions j'ai vue que la première fois sa ne marchais (comme les deux fonctions Left() et Right(), après le rechargement de la scène) mais que après tout fonctionner correctement (Right(), Left(), Jump() et Down()), j'ai donc regardé les similitudes entre ces deux fonctions, et la seule chose en commun c'est un booléen que je passe à false, j'ai donc essayé de le mettre sur les fonctions Right() et Left() et étonnamment, lorsque j'essaye une de ces fonctions, la première fois sa ne marche pas mais après tout remarche normalement :aille:
Je n'arrive pas à comprendre pourquoi sa marche la deuxième fois mais pas la première
Je vous mets les codes que j'ai changés ici:


Lors de l’exécution de Right() et Left()
MissingReferenceException: The object of type 'MovePlayer' 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.
De Jump()
MissingReferenceException: The object of type 'Rigidbody' 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.
De Down()
MissingReferenceException: The object of type 'Animator' 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.

Le code :

Code : Tout sélectionner

private bool boolJump = true;
....
....
....
void Right()
    {
        boolJump = false;
        transform.position += Vector3.right;
        posPlayer++;
    }

    void Left()
    {
        boolJump = false;
        transform.position += Vector3.left;
        posPlayer--;
    }

    void Jump()
    {
        boolJump = false;
        rb.AddForce(Vector3.up * jumpHeight);
    }

    void Down()
    {
        boolJump = false;
        animator.Play("PlayerDown");
    }
Bien sur, j'ai testé et il arrive à accéder à ses fonctions mais pour la première fois (après le rechargement de la scène) il s’arrête toujours après le boolJump = false; et me met toujours l'erreur en rapport avec la fonction.
Merci de votre aide en tout cas :-D :-D

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: Problème lors du rechargement de la scène

Message par djulio74 » 09 Mars 2020 07:58

Salut,
Sans le script complet c'est difficile de t'aider. A quoi sert cette boolean "boolJump"? tu l'assigne a "false" dans chacune des fonctions mais jamais tu la remet sur "true" ?
Quand ton perso meurt, que donne tu comme instruction? tu n'as pas de destroy, setActive ou autre qui pourrait désactiver un component?

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

Répondre

Revenir vers « Scripting »