2016-05-18 3 views
0

У меня проблема, когда я меняю изображение SpriteRenderer, когда вызывается метод onClick.Неправильный спрайт разрушен в Unity (DontDestroyOnLoad)

Однако у меня возникла проблема дубликатов в Сцене после ее перезагрузки (то есть выходите из сцены, а затем снова).

Я попытался решить это, уничтожив правильный дубликат при повторном входе в сцену. Однако старый (измененный) спрайт (тот, который я хотел бы сохранить) продолжает разрушаться, пока новый еще не существует.

Это часть моего кода для сохранения и уничтожения спрайт

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()); 
     } 
    } 
} 

Я действительно не понимаю, как условие destroySprite markedObjects.Contains (с) может быть передано в то же время разрушает неправильный спрайт! ,

Любая помощь была бы принята с благодарностью.

+0

Можете ли вы дать больше информации, как: что делает печать (г); Возврат строки. У вас есть весь объект, который вы ожидаете в этом списке? Когда вы называете эти две функции? –

+0

Что такое 'Clue'? Никто не знает, что это. Недостаточно вашего кода для получения справки. – Programmer

+0

является 'обозначеннымObjects' объявленным как статическим? Когда называется destroySprite? Для вашего второго вопроса: безопасно удалить при повторении попытку доступа к элементам в цикле for, который переходит от последнего элемента к первому. Таким образом, у вас не будет проблем с итератором и вы можете безопасно удалить элементы, не беспокоясь о неправильных индексах. – CShark

ответ

0

частная пустота destroySprite (Clue с) {< - Я полагаю, Clue с есть спрайт вы хотите уничтожить

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()); 
    } 
} 

}

Смежные вопросы