2016-05-18 5 views
0

Ich habe ein Problem, wo ich das Bild eines SpriteRenderer ändern, wie eine onClick-Methode aufgerufen wird.Falsches Sprite ist in Unity zerstört (DontDestroyOnLoad)

Allerdings hatte ich ein Problem von Duplikaten in der Szene nach dem Neuladen (d. H. Aus der Szene und dann wieder zurück).

Ich habe versucht, dies zu lösen, indem Sie das korrekte Duplikat beim Wiedereintritt in die Szene zerstören. Allerdings wird das alte (geänderte) Sprite (das ich behalten möchte) immer zerstört, während das neue noch da ist.

Dies ist Teil meines Code zum Speichern und zerstören das Sprit:

private void saveSprite(Clue c){ 
     markedObjects.Add(c); 
     Debug.Log ("Save"); 
     DontDestroyOnLoad (c.getSprite()); 
     create = true; 
} 

private void destroySprite(Clue c){ 
    foreach(Clue g in markedObjects){ 
     print (g); 
     if (!markedObjects.Contains(c)){ 
      Debug.Log("Destroy"); 
      Destroy (c.getSprite()); 
     } 
    } 
} 

ich wirklich nicht verstehen, wie die destroySprite Bedingung markedObjects.Contains (c) kann, während immer noch die falschen Sprite zu zerstören weitergegeben werden! .

Jede Hilfe würde sehr geschätzt werden.

+0

Können Sie weitere Informationen wie: Was macht den Druck (g); Linie kehrt zurück. Haben Sie alle Objekte, die Sie in dieser Liste erwarten? Wann rufen Sie diese beiden Funktionen auf? –

+0

Was ist 'Clue'? Niemand weiß, was das ist. Dein Code reicht nicht aus, um Hilfe zu erhalten. – Programmer

+0

ist 'markedObjects' als statisch deklariert? Wann wird zerstöreSprite genannt? Für Ihre zweite Frage: Um beim Iterieren sicher zu löschen, versuchen Sie, auf die Elemente in einer For-Schleife zuzugreifen, die vom letzten Element zum ersten geht. Somit haben Sie keine Probleme mit Iteratoren und können Elemente sicher löschen, ohne sich um falsche Indizes kümmern zu müssen. – CShark

Antwort

0

private void destroySprite (Clue c) {< - Ich gehe davon aus Clue c ist das Sprite Sie

foreach(Clue g in markedObjects){ <-- get each Clue in markedObjects 
    print (g); 
    if (!markedObjects.Contains(c)){ <-- if c is not within all of markedObjects then destroy c? Perhaps you meant to destroy g. 
     Debug.Log("Destroy"); 
     Destroy (c.getSprite()); 
    } 
} 

zerstören wollen}

Verwandte Themen