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, ile chcesz do sceny, albo ponownie używając przycisku „Instancjuj”, albo klikając na instancję piłki i naciskając „Duplikat” (Ctrl-D):

../../_images/instancing_multiball.png

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

../../_images/instancing_multiball.gif

Edytowanie instancji

Otwórz scenę Kula i dodaj Materiał fizyczny przez kliknięcie na strzałkę w dół i wybranie „Nowy materiał fizyczny”.

../../_images/instancing_physicsmat1.png

Następnie, rozwiń materiał przez kliknięcie na niego i ustawienie właściwości „Obcicie” 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.

You can also adjust individual instances. Set the bounce value back to 0 and then in the Main scene, select one of the instanced balls. Resources like PhysicsMaterial are shared between instances by default, so we need to make it unique. Click on the down arrow and select „Make Unique”. Set its Bounce to 1 and press „Play”.

../../_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).