• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Niszczenie i tworzenie obiektu w Unity3D

0 głosów
942 wizyt
pytanie zadane 5 maja 2018 w C# przez rubesom Obywatel (1,690 p.)

Cześć

Mam gdzie nie rozumiem jak odbywa się tworzenie i niszczenie obiektu:
 

public class MusciPlayer : MonoBehaviour
{
    static MusciPlayer instance = null;

    void Awake()
    {
        if (instance != null)
        {
            Destroy(gameObject);
        }
        else
        {
            instance = this;
            GameObject.DontDestroyOnLoad(gameObject);
        }
    }

Jak działa kod w linijce instance = this;? Co przyjmuje zmienna instance kiedy napiszemy to w taki sposób?

1 odpowiedź

+1 głos
odpowiedź 6 maja 2018 przez zmiennoimienny Mądrala (5,550 p.)

Przykład który podałeś jest implementacją tzw. singletona. Czyli wzorca projektowego który pozwala na istnienie tylko jednej instancji obiektu. (Na scenie w Unity będzie maksymalnie jeden komponent MusciPlayer)
W tym przypadku "instance" jest statycznym obiektem, czyli jest powiązany z klasą a nie z danym obiektem. Dzięki temu może być wywołany z każdego miejsca. Kiedy tworzony jest nowy obiekt, to sprawdzane jest czy już jakiś obiekt tej klasy istnieje. Jeżeli tak, to nowy obiekt jest usuwany. Jeżeli nie, to nowy obiekt staje się jedyną instancją danej klasy.
Kod działa mniej więcej tak:
 

public class MusciPlayer : MonoBehaviour
{
    static MusciPlayer instance = null; //Deklarujemy obiekt statyczny typu MusciPlayer
 
    void Awake() 
    {
        if (instance != null) //Czy istnieje jakaś instancja klasy MusciPlayer?
        {
           /// O nie! Istnieje już obiekt tego typu. Jako że może zostać tylko jeden, ten nowy
           /// należy zniszczyć
            Destroy(gameObject);
        }
        else
        {
            /// Nie ma żadnego obiektu tego typu! Więc jedyną instancją będzie nowo utworzony
            /// obiekt :)
            instance = this; //Przypisywanie nowego obiektu (definiujemy obiekt instance)
            GameObject.DontDestroyOnLoad(gameObject);
        }
}

 

Podobne pytania

+2 głosów
3 odpowiedzi 2,739 wizyt
pytanie zadane 10 listopada 2017 w C i C++ przez randinpa Początkujący (450 p.)
0 głosów
2 odpowiedzi 284 wizyt
0 głosów
0 odpowiedzi 160 wizyt
pytanie zadane 3 czerwca 2019 w C# przez rubesom Obywatel (1,690 p.)

87,895 zapytań

136,484 odpowiedzi

304,291 komentarzy

58,280 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...