W przeciwieństwie do tradycyjnego systemu aktorów stosowanego w Unreal Engine, narzędzie Scene Graph definiuje obiekty w świecie za pomocą systemu jednostek i komponentów. Jednostki pełnią funkcję kontenerów na komponenty i inne jednostki, a komponenty zapewniają relacje z jednostkami, do których są dołączone. Tworzenie obiektu gry za pomocą narzędzia Scene Graph polega na rozpoczęciu pracy od jednostki podstawowej oraz dodawaniu danych i zachowań przy użyciu komponentów. Każdy komponent wprowadza nowe zachowanie, a łącząc je ze sobą, można budować złożone obiekty, które można ponownie wykorzystywać i po których można iterować.
Podstawowe informacje o budowaniu
Aby zobaczyć, o co chodzi w tym punkcie, przyjrzyj się rzędowi słupów oświetleniowych w pierwszej sekcji szablonu korytarza. Każdy słup oświetleniowy jest gotowcem, czyli kolekcją jednostek i komponentów zapisanych jako pojedynczy obiekt. Obiekt gotowca ma takie same cechy, zachowanie, właściwości i atrybuty jak jednostki oraz komponenty, z których został zbudowany. Aby dowiedzieć się więcej o jednostkach i komponentach, zapoznaj się z dokumentem Praca z jednostkami i komponentami.
Iteracja poprzez instancjonowanie
Gotowce to zasoby, a to umożliwia ich instancjonowanie na poziomach podczas edycji lub rozgrywki. Za każdym razem, gdy przeciągasz gotowiec z przeglądarki zawartości lub tworzysz kopię za pomocą kodu Verse, tworzysz instancję nowego gotowca Scene Graph w świecie.
Każda instancja gotowca powoduje określone wykorzystanie pamięci i mocy obliczeniowej, jednak tworzenie instancji nowych gotowców nie podwaja użycia pamięci, ponieważ zasoby używane w gotowcu są współdzielone przez instancje.
Tworzenie wielu instancji tego samego obiektu daje wiele możliwości, ale gotowce także są przydatnym rozwiązaniem do szybkiego iterowania w projekcie. W przeglądarce zawartości otwórz folder LightPost. W tym folderze są przechowywane zasoby służące do tworzenia końcowego projektu gotowca P_LightPost.
Każdy słup oświetleniowy w korytarzu jest częścią tego gotowca. Gdy idziesz korytarzem, przy każdym kroku jest dodawany nowy komponent, aż zostanie uzyskany końcowy projekt gotowca.
Pierwszy słup oświetleniowy to prosta konfiguracja składająca się z trzech jednostek: słupa oświetleniowego, punktu odniesienia i latarni. Każda z tych trzech jednostek ma komponent transform_component, który określa położenie tej jednostki na poziomie. Zarówno jednostka nadrzędna, jak i jednostka Lantern mają komponent mesh_component, który sprawia, że są widoczne oraz wyświetla modele odpowiednio dla słupa oświetleniowego i latarni. Są one połączone jednostką Pivot, która reprezentuje połączenie między słupem oświetleniowym a latarnią.
Drugi słup oświetleniowy przeprowadza iterację w oryginalnym projekcie, dodając nową jednostkę z komponentem sphere_light_component jako element potomny jednostki Lantern, co powoduje jej świecenie.
Samo świecenie nie jest jednak zbyt interesujące, więc trzeci słup oświetleniowy dodaje komponent particle_system_component, aby symulować ćmy latające wokół jednostki SphereLight w celu uzyskania ciekawszego efektu wizualnego.
Następnie czwarta instancja słupa oświetleniowego dodaje zarówno niestandardowy komponent simple_movement_component, jak i komponent keyframe_movement_component do jednostki Pivot. Te komponenty współpracują ze sobą, aby symulować ruch jednostki i jej elementów potomnych, dzięki czemu latarnia kołysze się w przód i w tył.
Te komponenty używają Verse do określania ścieżki, po której porusza się latarnia, odległości, jaką pokonuje latarnia na tej ścieżce, oraz obrotu latarni w celu imitowania efektu wiejącego wiatru. Komponent ruchu klatki kluczowej pozwala uzyskać płynny, ciągły ruch na podstawie współrzędnych podanych w komponencie simple_movement_component.
Na koniec ostatnia instancja słupa oświetleniowego dodaje niestandardowy komponent Verse lantern_interaction_component do słupa oświetleniowego, a także komponent interactable_component do jednostki Lantern. Gdy gracz zbliża się do latarni i wchodzi z nią w interakcję, komponent lantern_interaction_component włącza lub wyłącza latarnię poprzez włączanie i wyłączanie poszczególnych komponentów light_component i particle_system_component na całym słupie oświetleniowym.
Zastąpienia
Gdy instancjonujesz gotowiec, jest inicjowany z wartościami domyślnymi takimi samymi jak te podane w definicji gotowca, z której jest tworzona instancja. Co trzeba zrobić, aby zmienić konkretny aspekt jednej z instancji gotowca? Może chcesz zastosować światło w innym kolorze lub metalowy słup oświetleniowy zamiast drewnianego. Właśnie w takiej sytuacji są stosowane zastąpienia.
Zastąpienia umożliwiają zmienianie wartości w instancjach klasy gotowca w celu dostosowania poszczególnych instancji bez konieczności modyfikowania gotowca nadrzędnego. Gdy wprowadzasz zmiany w opcjach komponentu zagnieżdżonego w instancji gotowca, te zmiany zastępują opcje w gotowcu nadrzędnym i wpływają na sposób działania jednostki na poziomie tego komponentu tylko w konkretnej instancji.
Zastąpienia i zmiany można stosować w poszczególnych instancjach gotowca w celu urozmaicania sceny. Jeśli zamiast tego chcesz propagować zmiany do wszystkich instancji gotowca, możesz użyć edytora gotowców, aby odzwierciedlić te zmiany we wszystkich instancjach gotowca w scenie.
Funkcjonalność języka Verse w narzędziu Scene Graph
Narzędzie Scene Graph to natywny system języka Verse, który umożliwia wykorzystywanie ich obu na wiele bogatych w możliwości sposobów. Gotowce tworzone w projekcie są ujawniane jako klasy zasobów w Verse za pośrednictwem pliku Assets.digest.verse i możesz odwoływać się do nich w kodzie zarówno w komponentach Verse, jak i w urządzeniach Verse.
Możesz także używać Verse do wykonywania zapytań o poszczególne jednostki i komponenty w scenie. Funkcja GetComponents() umożliwia pobieranie konkretnych komponentów na podstawie ich typu, a funkcja GetEntities() zwraca wszystkie jednostki podrzędne należące do konkretnego elementu nadrzędnego. Ponadto możesz przeszukiwać hierarchię Scene Graph w górę i w dół, aby znajdować jednostki potomne i przodków. Gotowiec P_LightPost użyty w tym szablonie używa Verse do uzyskiwania ruchu kołysania i interaktywności latarni.
Aby dowiedzieć się więcej o tworzeniu funkcjonalnych obiektów gry, przejdź do następnej sekcji Ruch i interakcja.
Ruch i interakcja
Dowiedz się, jak dodawanie ruchów do jednostek umożliwia tworzenie funkcjonalnych obiektów gry z komponentem Verse i komponentem ruchu klatki kluczowej.