Za pomocą tagów rozgrywki można wyszukiwać aktorów oznaczonych konkretnym tagiem, gdy gra jest uruchomiona. Tagi rozgrywki umożliwiają pracę z wieloma aktorami bez konieczności konfigurowania właściwości i przypisywania odwołań w Unreal Editor dla Fortnite (UEFN). Tagi rozgrywki tworzone są w kodzie Verse i przypisywane w UEFN.
Korzystanie z tagów rozgrywki otwiera wiele ciekawych możliwości w trakcie rozgrywki, takich jak:
Zmiana konfiguracji poziomu bez konieczności dodawania lub modyfikowania odwołań do urządzeń w urządzeniu utworzonym w Verse.
Wyszukiwanie wszystkich aktorów oznaczonych konkretnym tagiem i operowanie nimi w zależności od ich typu, na przykład włączanie świateł lub przełączanie barier.
Dynamiczne modyfikowanie aktorów aktywnych w miarę postępów gracza w grze.
Warunkowe włączanie aktorów dla przeszkody uruchamianej na podstawie wybranej przez gracza opcji trudności.
Co można otagować?
Obecnie tagi rozgrywki można przypisywać do następujących obiektów:
W poniższych sekcjach zawarto opis tworzenia tagów rozgrywki w projekcie oraz pracy z tymi tagami.
Tworzenie tagu rozgrywki
Aby utworzyć nowy tag rozgrywki za pomocą Verse, wykonaj następujące instrukcje:
Otwórz plik Verse w Visual Studio Code za pomocą Eksploratora Verse.
Na początku pliku Verse dodaj poniższy kod, aby włączyć odwołanie do klasy
tag.Verseusing { /Verse.org/Simulation/Tags }Utwórz nową klasę dziedziczącą z klasy
tagu. Nazwa klasy określa nazwę tagu. W tym przykładzie nazwa klasy tomytag, więc nazwa tagu rozgrywki to mytag.Verse# Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Otrzymany plik Verse powinien wyglądać następująco:
Verseusing { /Fortnite.com/Devices } using { /Verse.org/Simulation } using { /Verse.org/Simulation/Tags } # Derive from the `tag` class in the Verse.org/Simulation/Tags module to create a new gameplay tag. mytag := class(tag){}Zapisz plik Verse i kliknij opcję Kompiluj skrypty Verse na pasku narzędzi UEFN, aby skompilować kod i móc użyć swojego nowego tagu rozgrywki.
Tagi rozgrywki są etykietami hierarchicznymi. Tagi te mogą mieć w nazwie klasy dowolną liczbę poziomów hierarchicznych oddzielonych znakiem _.
Gdy w edytorze pojawi się nazwa tagu rozgrywki, znaki _ zostaną zastąpione znakiem ".".
Na przykład trójpoziomowy tag rozgrywki o nazwie klasy family_genus_species będzie wyświetlany w edytorze jako "family.genus.species", przy czym człon „family" będzie najszerszym identyfikatorem w hierarchii, a człon "species" będzie w niej identyfikatorem najwęższym.
Należy pamiętać, że istnienie klasy "family.genus.species" nie jest równoznaczne z istnieniem także tagów rozgrywki "family.genus" i "family". Aby utworzyć poziomy hierarchiczne, musisz utworzyć w Verse te Tagi rozgrywki z nazwami klasy family i family_genus.
Przypisywanie tagu rozgrywki
Poniższa procedura pozwala przypisać tag rozgrywki. W tym przykładzie wykorzystano urządzenie, jednak procedura wygląda tak samo także w przypadku innych aktorów.
W UEFN, w Outlinerze, wybierz urządzenie, które chcesz otagować, aby otworzyć jego Panel szczegółów. W tym przykładzie urządzenie jest urządzeniem przycisku.
W panelu Szczegóły kliknij opcję Dodaj nowy komponent i wybierz z menu rozwijanego pozycję Znacznik tagu Verse.
Wybierz komponent VerseTagMarkup, aby wyświetlić jego ustawienia w panelu Szczegóły.
W obszarze Tagi rozgrywki edytuj właściwość Tags i dodaj swój tag rozgrywki. W tym przykładzie mytag został dodany do urządzenia.
Do tego samego aktora można dodać wiele tagów, aby każdy aktor mógł równocześnie należeć do wielu grup. Aktorów opatrzonych wieloma tagami można wyszukać za pomocą dowolnego przypisanego do nich tagu.
Na przykład aktor oznaczony tagami mytag1 i mytag2 zostanie znaleziony po użyciu wywołania GetCreativeObjectsWithTag(mytag1{}) lub GetCreativeObjectsWithTag(mytag2{}).
Wyszukiwanie aktorów na podstawie tagu rozgrywki
Po przypisaniu tagów rozgrywki do aktorów możesz wyszukiwać aktorów w trakcie gry na podstawie tagu rozgrywki za pomocą funkcji Verse GetCreativeObjectsWithTag(). W poniższym przykładzie wywołanie funkcji GetCreativeObjectsWithTag(mytag{}) zwraca wiersz TaggedDevices zawierający wszystkich aktorów z przypisanym tagiem mytag:
TaggedActors := GetCreativeObjectsWithTag(mytag{})Wywołanie funkcji GetCreativeObjectsWithTag() zwraca tablicę wszystkich obiektów z implementacją creative_object_interface. Jeśli na przykład przypiszesz tag mytag zarówno do urządzenia przycisku, jak i do urządzenia konfigurowalnego światła na danym poziomie, wówczas to wywołanie funkcji zwróci obydwa urządzenia.
Można skonwertować wynik wywołania funkcji GetCreativeObjectsWithTag() do jednej z jego klas implementacji (operacja nazywana rzutowaniem typu) za pomocą składni NewObjectReference := object_type_to_cast_to[ObjectReference], gdzie object_type_to_cast_to oznacza żądany typ obiektu. Aby na przykład włączyć lub wyłączyć urządzenie konfigurowalnego światła, trzeba skonwertować wynik do postaci customizable_light_device przed wywołaniem funkcji TurnOff() lub TurnOn().
Rzutowanie typu jest wyrażeniem zawodnym, ponieważ konwersja typu zakończy się niepowodzeniem, jeśli nie można skonwertować urządzenia do tego typu, na przykład w przypadku urządzenia innego typu. Urządzenia przycisku nie można na przykład skonwertować do klasy customizable_light_device, ponieważ urządzenie przycisku oraz urządzenie konfigurowalnego światła nie są urządzeniami tego samego typu.
Dzięki wyrażeniom for można użyć wyrażeń zawodnych jako filtra i tworzyć nowe zmienne do wykorzystania w bloku kodu for. Można na przykład dodać konwersję typu customizable_light_device do wyrażenia iteracyjnego w bloku for. Urządzenie zostało skonwertowane do customizable_light_device, więc do wyłączenia światła będzie można użyć funkcji właściwych dla tej klasy, takich jak TurnOff().
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors, LightDevice := customizable_light_device[TaggedActor]):
LightDevice.TurnOff()W poniższym przykładzie przedstawiono, w jaki sposób sprawdzić typ aktora i wywołać różne funkcje na podstawie tego typu. Ten przykład sprawdza, czy oznaczony tagiem Aktor jest urządzeniem konfigurowalnego światła, które może wywołać funkcję TurnOff() w celu wyłączenia światła, czy urządzeniem bariery, które może wywołać funkcję Disable() w celu wyłączenia światła.
TaggedActors := GetCreativeObjectsWithTag(mytag{})
for (TaggedActor : TaggedActors):
if (LightDevice := customizable_light_device[TaggedActor]):
# If the tagged actor is a Customizable Light device, turn it off
LightDevice.TurnOff()
else if (BarrierDevice := barrier_device[TaggedActor]):
# If the tagged actor is a Barrier device, turn it off
BarrierDevice.Disable()W przypadku wywołania funkcji GetCreativeObjectsWithTag() lista wyników nie jest uporządkowana według żadnej metody, która jest znana lub na którą można z wyprzedzeniem wpłynąć. W przypadku dodania lub usunięcia aktorów między wywołaniami funkcji GetCreativeObjectsWithTag() z wykorzystaniem tego samego tagu kolejność wyników na liście może być różna dla każdego wyniku wywołania.
Jeśli gra wymaga obsługi aktorów w określonej kolejności, zamiast tagów rozgrywki należy użyć edytowalnej tablicy, ponieważ wynikiem wywołania funkcji GetCreativeObjectsWithTag() jest nieuporządkowana lista aktorów.
Wyszukiwanie pozycji według typu za pomocą tagów rozgrywki
Oto przykład sposobu filtrowania aktorów zwracanych przez wywołanie funkcji GetCreativeObjectsWithTag() według typu oraz wyświetlania ich pozycji.
# find all actors with the all_tag
AllCreativeObjects : []creative_object_interface := GetCreativeObjectsWithTag(all_tag{})
# Print the position of all creative_prop actors with the all_tag
for (Prop : AllCreativeObjects):
if (Prop := creative_prop[Prop]):
Print("Prop found with all_tag at position: {Prop.GetTransform().Translation}")
# Print the position of all device actors with the all_tag
for (Device:AllCreativeObjects):
Samouczki wykorzystujące tagi rozgrywki
W poniższych samouczkach zaprezentowano, w jaki sposób wykorzystać tagi rozgrywki w grze.
Łamigłówka z otagowanymi światłami
Tworzenie łamigłówki wykorzystującej urządzenie utworzone w języku Verse, w której gracz musi znaleźć właściwą kombinację włączonych i wyłączonych świateł, aby zespawnować przedmiot.