Tworzenie instancji

Wprowadzenie

Tworzenie pojedynczej sceny i dodawanie do niej węzłów może działać w przypadku małych projektów, ale wraz ze wzrostem rozmiaru i złożoności projektu liczba węzłów może szybko stać się niemożliwa do opanowania. Aby temu zaradzić, Godot pozwala aby projekt został podzielony na dowolną liczbę scen. W ten sposób otrzymasz potężne narzędzie, które pomoże Ci zorganizować różne elementy gry.

W Sceny i węzły dowiedziałeś się, że scena jest zbiorem węzłów zorganizowanych w strukturę drzewa, z pojedynczym węzłem jako korzeniem drzewa.

../../_images/tree.png

Można tworzyć dowolną liczbę scen i zapisywać je na dysku. Zapisane w ten sposób sceny nazywane są "Spakowanymi Scenami" i mają rozszerzenie nazwy pliku .tscn.

../../_images/instancingpre.png

Po zapisaniu sceny można tworzyć jej instancje by przenieść do innej sceny, tak jakby była to inna scena.

../../_images/instancing.png

Na powyższym zdjęciu Scena B została dodana do Sceny A.

Instancjowanie na przykładzie

Aby dowiedzieć się, jak działa instancjowanie, zacznijmy od pobrania przykładowego projektu: instancing.zip.

Rozpakuj ten projekt gdziekolwiek chcesz. Następnie otwórz Godot i dodaj ten projekt do menedżera projektu za pomocą przycisku 'Importuj':

../../_images/instancing_import.png

Przejdź do wyodrębnionego folderu i otwórz plik "project.godot", który znajduje się wewnątrz niego. Następnie nowy projekt pojawi się na liście projektów. Edytuj projekt, naciskając przycisk Edytuj.

Projekt ten składa się z dwóch scen: "Ball.tscn" i "Main.tscn". Scena z piłką używa RigidBody2D do zapewnienia poprawnego zachowania fizyki, podczas gdy główna scena ma zestaw przeszkód dla piłki do zderzania się (używając StaticBody2D).

../../_images/instancing_ballscene.png ../../_images/instancing_mainscene.png

Otwórz scenę Main, a następnie wybierz węzeł główny:

../../_images/instancing_mainroot.png

Chcemy dodać przykład sceny Ball jako dziecko Main. Kliknij przycisk w kształcie "linku" (po nakierowaniu wyświetla się tekst "Instancjuj scenę jako węzeł") i wybierz plik Ball.tscn.

../../_images/instancing_linkbutton.png

Piłka zostanie umieszczona w lewym górnym rogu obszaru ekranu (jest to (0, 0) we współrzędnych ekranu). Kliknij i przeciągnij piłkę gdzieś na środku u góry sceny:

../../_images/instancing_placeball.png

Naciśnij przycisk Odtwórz i obserwuj, jak piłka opada na dół ekranu:

../../_images/instancing_playbutton.png

Wielokrotne instancje

Możesz dodać tyle instancji do sceny ile chcesz; poprzez ponowne użycie przycisku "Instancja", albo klikając na instancję piłki i naciskając skrót "Duplikuj" Ctrl + D (Cmd + D na systemach macOS):

../../_images/instancing_multiball.png

Uruchom scenę ponownie i wszystkie piłki spadną.

../../_images/instancing_multiball.gif

Edytowanie instancji

Otwórz scenę Ball, kliknij PhysicsMaterial``aby rozwinąć listę parametrów i ustaw wartość parametru ``Bounce na 1.

../../_images/instancing_physicsmat2.png

Wciśnij "Graj". Zauważysz, że wszystkie piłki będące instancjami odbijają się mocniej. Jako, że bazują one na zapisanej scenie, zmiany w niej mają wpływ na wszystkie instancje.

Można również dostosować poszczególne instancje. Ustaw wartość odbicia z powrotem na 0, a następnie w scenie Main wybierz jedną z kul. Zasoby takie jak PhysicsMaterial domyślnie są współdzielone między instancjami, potrzebujemy to zmienić. Kliknij na strzałkę w dół i wybierz "Zrób unikalny". Następnie ustaw Bounce na 1 i naciśnij "Odtwórz".

../../_images/instancing_property.png

Zauważ, że obok dostosowanej właściwości pojawia się szary przycisk "przywrócenia". Gdy przycisk ten jest obecny, oznacza to, że zmodyfikowano właściwość instancji w celu zastąpienia jej wartości w zapisanej scenie. Nawet jeśli ta właściwość zostanie zmodyfikowana w oryginalnej scenie, wartość niestandardowa pozostanie. Naciśnięcie przycisku przywracania spowoduje przywrócenie właściwości do wartości zapisanej sceny.

Wniosek

Instancjonowanie może być przydatne, kiedy chcesz utworzyć wiele kopii tego samego obiektu. Można również tworzyć instancje przy użyciu GDScripta - Instancje (kontynuacja).