A więc w mojej grze po wejściu w kolizję z przedmiotem on znika tak jak powinien. Problem pojawia się wtedy gdy przechodzę na kolejną scenę a potem wracam do tej pierwszej. Przedmiot znowu się pojawia i znowu trzeba go zebrać. Czy znacie jakiś sprawdzony sposób żeby trzymać zmienną bool pomiędzy scenami?
To temat rzeka zależny od ogólnej architektury.
- Jeśli jesteś początkujący i faktycznie wystarczy Ci trzymanie tej zmiennej między scenami, to użyj do tego "zmiennej statycznej"
- Jeśli będziesz chciał iść krok dalej, to pomyśl o trzymaniu itemków w jakimś kontenerze/liście, spawnieniu ich i kasowaniu. Takie coś jest przydatne także przy np. save/load, bo zapisujesz sobie np. ID lub nazwy przedmiotów na liście (+pozycje jeśli są niezebrane), walisz liste do pliku tekstowego, a później przy wczytaniu gry ładujesz plik i spawnisz przedmioty względem tego, co zapisano.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PrzyDotknięciu : MonoBehaviour
{
public GameObject To;
public static bool znikło;
void Update(){
if(znikło == true){
Destroy(To);
}
}
void OnTriggerEnter2D(Collider2D other){
if(other.CompareTag("Player")){
znikło = true;
MenagerDzwienkow.PlaySound ("Zebralem");
}
}
}
Jeśli wiele przedmiotów ma ten skrypt i przez to znika, to zamiast static bool trzebaby użyć czegoś innego, bo teraz jedna zmienna określa zniknięcie wszystkich przedmiotów.
Proponuję coś takiego:
public static List<GameObject> zniknietePrzedmioty;
zamiast Update zrób Start a w nim
if (zniknietePrzedmioty != null && zniknietePrzedmioty.Contains(To)) Destroy(To);
a w triggerze:
if (zniknietePrzedmioty == null)
zniknietePrzedmioty = new List<GameObject>();
zniknietePrzedmioty.Add(To);
to pseudokod z pamięci, ale chodzi o to, żebyś trzymał informacje na temat WSZYSTKICH zebranych przedmiotów