2016-04-27 1 views
0

Je souhaite stocker mes données lorsque la scène courante en cours a été déchargée. A cet effet, je l'ai écrit le code suivant:MissingReferenceException au moment du déchargement de la scène

void OnDisable() 
{ 
    BackUpPuzzleData(); 
} 

public void BackUpPuzzleData() 
{ 
    if (DataStorage.RetrievePuzzleStatus (difficultyLevel, puzzleId) == Constants.PUZZLE_NOT_OPENED 
     && DataStorage.RetrievePuzzleStatus (difficultyLevel, puzzleId) != Constants.PUZZLE_COMPLETED) 
     DataStorage.StorePuzzleStatus (difficultyLevel, puzzleId, Constants.PUZZLE_RUNNING); 

    if (DataStorage.RetrievePuzzleStatus (difficultyLevel, puzzleId) == Constants.PUZZLE_RUNNING) 
     StorePuzzleData(); 
} 


private void StorePuzzleData() 
{ 
    DataStorage.StorePuzzleTimePassed (difficultyLevel, puzzleId, GameController.gamePlayTime); 

    foreach (Transform cell in gridTransform) { 
     CellInformation cellInfo = cell.GetComponent<CellInformation>(); 
     if (cellInfo != null) { 
      CellStorage.StorePuzzleCellNumber (difficultyLevel, puzzleId, cellInfo.RowIndex, cellInfo.ColIndex, cellInfo.number); 
      CellStorage.StorePuzzleCellColor (difficultyLevel, puzzleId, cellInfo.RowIndex, cellInfo.ColIndex, cellInfo.CellColor); 
      CellStorage.StorePuzzleCellDisplayColor (difficultyLevel, puzzleId, cellInfo.RowIndex, cellInfo.ColIndex, cellInfo.CellDisplayColor); 
     } 
    } 
} 

Mais quand la méthode OnDisable est appelée à ce moment-Console me donner l'erreur suivante:

enter image description here

Je l'ai déjà mis en ordre d'exécution des certificats dans le projet paramètres alors pourquoi je reçois ce genre d'erreur? Fondamentalement, je veux enregistrer les données de jeu en cours de jeu de sorte que lorsque le joueur revient, il peut recommencer à partir de laquelle il a quitté le jeu.

+0

Pourquoi exactement cette séquence? Pouvez-vous essayer d'enregistrer les données au début et de décharger la scène après l'enregistrement terminé? –

+0

Y a-t-il un événement que vous pouvez traiter avant OnDisable? Il semblerait que vous ayez perdu l'accès aux objets que vous devez interroger à ce stade. – ManoDestra

+0

Comment décririez-vous un événement lorsque la scène est sur le point de se décharger? par exemple, un clic sur un bouton de retour? – NeverHopeless

Répondre

0

Passant un peu de temps avec ce problème, maintenant je peux résoudre ce problème. Je ne sais pas combien de solution était correcte mais au moins travaille maintenant pour moi.

Ici, je discute de cela parce que certains membres obtiennent un indice à ce sujet.

Au moment du chargement du jeu, j'ai rempli une liste avec le script de toutes les cellules. Chaque cellule de la grille a un script attaché CellInformation. Donc, je prépare la liste de tous ces scripts de cellules. Au moment de la désactivation du jeu, j'ai récupéré de la valeur à partir de ces scripts et je les ai stockés dans le stockage local (

). Je peux accéder à des scripts mais pas à des objets de la liste car ils ont déjà été détruits. J'espère que cela donnera quelques indications à d'autres programmeurs.

+0

et si le jeu se bloque? vous allez perdre vos informations de jeu ... – MalachiteBR

+0

Le code du jeu fonctionne si bien alors comment peut-il générer un accident !!! – Siddharth

+0

Je suis désolé ... Je ne veux pas être impoli ... mais, quel âge avez-vous? C'est tellement naïf de croire que le jeu ne tombera jamais en panne: D – MalachiteBR

1

J'ai une suggestion, au lieu d'enregistrer quand le déchargement de la scène, vous pouvez enregistrer chaque fois que le joueur fait un mouvement, de cette façon, même si le jeu se bloque, vous pouvez récupérer de la dernière fois que le joueur a bougé.

Cette scène se déchargera automatiquement ou l'utilisateur fera-t-il des actions (comme cliquer sur un bouton)? S'il s'agit d'un événement joueur, vous devriez mettre votre code de sauvegarde sur ce bouton, car, dans la mesure où je pourrais faire des recherches, le comportement OnDisable sera appelé après la destruction de vos objets, rendant impossible le stockage de leurs données.

+0

Fondamentalement, je travaille sur le jeu Sudoku afin de stocker les données par mouvement de jeu ne semble pas être correct selon ma pensée. – Siddharth

+0

De nombreux jeux, beaucoup plus complexes que le sudoku, le font comme ça. Fallout Shelter par exemple, si vous quittez simplement le jeu en appuyant sur le bouton d'accueil, il va reprendre là où vous étiez. – MalachiteBR

+0

si OnDisable commence à travailler alors j'ai cette fonctionnalité aussi ... – Siddharth