• 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

Object Storage Arubacloud
0 głosów
1,291 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,540 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 3,519 wizyt
pytanie zadane 10 listopada 2017 w C i C++ przez randinpa Początkujący (450 p.)
0 głosów
2 odpowiedzi 569 wizyt
0 głosów
0 odpowiedzi 243 wizyt
pytanie zadane 3 czerwca 2019 w C# przez rubesom Obywatel (1,690 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...