Jak zapamiętać booleany pomiędzy scenami?

Jak zapamiętać booleany pomiędzy scenami?
KS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

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?

Boski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 142
0

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.
KS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 8
0

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

}

Boski
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 142
0

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.