Jak zapamiętać booleany pomiędzy scenami?

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?

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

}

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1