Szablon Wyścig szosowy z persystencją Verse to szablon trybu kreatywnego Projektowanie wyścigu szosowego przekonwertowany na UEFN, z następującymi funkcjami dodanymi do projektu:
Trwała lokalna tablica rankingowa w lobby przed grą, wykorzystująca persystencję Verse, która wyświetla się tylko podczas pierwszej rundy.
System, który przydziela graczy do samochodów na linii startu w zależności od ich kolejności na mecie w poprzedniej rundzie, przy użyciu persystencji Verse.
Prezentacja początkowa, podczas której wyświetlane są statystyki każdego gracza za pomocą filmiku i Verse.
I o wiele więcej!
Celem szablonu trybu kreatywnego Projektowanie wyścigu szosowego było wykorzystanie zasobów toru wyścigowego do stworzenia unikalnego trybu wyścigu z funkcjami zwiększającymi komfort gry. W przypadku tego szablonu UEFN przyjęto holistyczne podejście do wymiany i aktualizacji wielu funkcji na całej mapie, aby wykorzystać potężne możliwości UEFN.
W poniższych sekcjach omówiono te aktualizacje bardziej szczegółowo.
Ulepszanie obszaru samouczka
Tablicę rankingową znajdziesz w obszarze samouczka. Za każdym razem, gdy załadujesz swoją pierwszą rundę na mapie, masz 30 sekund, aby spojrzeć na aktualną tablicę rankingową i zbadać obszar samouczka.
Obszar ten został zbudowany tak, aby był atrakcyjny wizualnie dla graczy spragnionych wyścigowej zabawy, a jednocześnie zawierał szczegółowe informacje na temat tego, jak zbudować mapę podobną do tej. Obszar samouczka został przeprojektowany w oparciu o szablon kreatywny, aby był bardziej przejrzysty i otwarty, a świetliki zostały dodane, aby wprowadzić trochę naturalnego światła Lumen.
Po załadowaniu szablonu w UEFN możesz przeczytać o konfiguracji każdej grupy urządzeń i skryptów Verse, aby dowiedzieć się, jak szablon został zbudowany, i wdrożyć je we własnej rozgrywce.
Obszar samouczka to miejsce, w którym znajduje się większość naszych urządzeń, dzięki czemu możesz je przeglądać i zrozumieć ich logikę. Należą do nich podstawowe urządzenia zatrzymywania graczy, wyróżnienia i analizy. Urządzenia wyróżnień przyznają PD tylko wtedy, gdy ukończysz okrążenie lub wyścig.
Urządzenia analizy możesz skonfigurować do śledzenia różnych punktów danych, które pomogą ci ulepszyć projekt w przyszłych aktualizacjach. Ten szablon śledzi, jak często każdy punkt kontrolny jest ukończony i jak często ludzie zbierają srebrne monety podczas wyścigu. Oba podają dane na temat tego, jak łatwo lub trudno jest dotrzeć do konkretnego punktu kontrolnego lub monety. W oparciu o te dane możesz dostosować położenie lub liczbę tych obiektów w przyszłych wersjach, aby cała gra działała płynniej i zapewniała lepsze wrażenia z wyścigów.
Czyszczenie Outlinera
Po przekonwertowaniu projektu do UEFN Outliner był zapchany długą listą nieuporządkowanych zasobów.
Co prawda wszystko wciąż działało, jednak nazwy pojazdów, barier i innych elementów miały dołączone numery, co utrudniało zrozumienie struktury projektu. Podczas procesu konwersji numery te zostały automatycznie dodane, aby zapewnić unikalną nazwę dla każdego zasobu i urządzenia.
Aby tym zarządzać, do projektu dodano system plików w celu uporządkowania wszystkich obiektów w oparciu o ich lokalizację i funkcjonalność. Chociaż porządkowanie zajmuje trochę czasu, system ten oznacza, że możesz przenosić lub usuwać grupy obiektów lub całe obszary znacznie sprawniej niż w trybie kreatywnym.
Trwała lokalna tablica rankingowa
Ze względu na brak trwałych danych na oryginalnej mapie trybu kreatywnego, nie można było śledzić poprzednich zwycięzców wyścigów ani statystyk graczy. W zaktualizowanym szablonie mapy UEFN korzystanie z Verse i persystencji Verse oznacza, że możemy przechowywać dane graczy w trakcie sesji gry, aby monitorować statystyki graczy i tworzyć lokalne tablice rankingowe. Możesz uzyskać dostęp tylko do danych graczy, którzy są w bieżącej sesji, więc tablica rankingowa będzie odzwierciedlać tylko statystyki graczy aktualnie grających.
Zdecydowaliśmy, że "podium" i "czas okrążenia" będą najważniejszymi trwałymi statystykami do śledzenia dla każdego gracza. Gracze zdobywają podium tylko wtedy, gdy znajdą się w pierwszej trójce zawodników kończących wyścig, podczas gdy najlepszy czas okrążenia informuje o najszybszych zawodnikach. Dodaliśmy również dodatkową statystykę o nazwie "punkty". Gracze otrzymują punkty w zależności od zajętego miejsca podczas wyścigu, więc gracze, którzy często się ścigają, ale niekoniecznie zajmują dobre miejsca, mogą nadal zdobywać dużą liczbę punktów. Dzięki tym statystykom znaleźliśmy sposób na wyróżnienie najbardziej zaciekłych, najszybszych i najbardziej oddanych zawodników.
Przekonwertowany szablon wykorzystuje przedmeczowe lobby z lokalnymi tablicami rankingowymi, które pokazują życiowe statystyki każdego gracza. Statystyki te są sortowane w taki sposób, aby gracze z najlepszymi życiowymi statystykami punktowymi byli wyświetlani najpierw, a trzej najlepsi gracze zostali wyróżnieni, aby podkreślić ich umiejętności. Statystyki te są również wyświetlane na interfejsie HUD podczas początkowej sekwencji filmowej, co pozwala innym graczom przyjrzeć się konkurencji i zapamiętać, na kogo należy uważać podczas wyścigu.
Aby dowiedzieć się więcej o tym, jak stworzyć trwałą lokalną tablicę rankingową, zapoznaj się z artykułem Tworzenie własnej tablicy rankingowej gry w Verse.
Kolejność zawodników na linii startu
Przekonwertowany szablon zastępuje losową kolejność zawodników na linii startu z oryginalnego projektu kolejnością opartą na tym, jak dobrze zawodnicy radzili sobie w poprzedniej rundzie. W ten sposób zachęca się graczy do szybkiego ukończenia wyścigu, nawet jeśli nie są na pierwszym miejscu.
W pierwszej rundzie zawodnicy są umieszczani w losowej kolejności, ale po pierwszej rundzie są oni uporządkowani według pozycji, którą zajęli w poprzedniej rundzie. Informacje te muszą być przechowywane między rundami, ale nie powinny być zapisywane po zakończeniu gry. Możesz ich użyć do określenia kolejności startowej, sortując graczy na podstawie ich poprzedniej kolejności na mecie. Aby dowiedzieć się, jak przechowywać informacje o rundach i sortować dane, zapoznaj się z poniższymi samouczkami:
# Orders and returns players by their finish order in the previous round.
# During the first round, players are given random starting placements.
GetPlayerStartOrder<public>(Players:[]player):[]player=
var OrderedPlayers:[]player = Players
if:
IsFirstRound[GetRound[]]
then:
# Randomize player order because it's first round.
set OrderedPlayers = Shuffle(OrderedPlayers)
Przypisując graczy do pojazdów i ustawiając ich na linii startowej, upewnij się, że są oni rzeczywiście aktywni i będą się ścigać. Możesz utworzyć funkcję o nazwie GetAllValidPlayers(), która przechodzi przez wszystkich graczy i zwraca tych, którzy są nadal aktywni (nie opuścili jeszcze gry) i nie są widzami (będą się ścigać).
# Get all players that are able to race.
GetAllValidPlayers(Players:[]player):[]player=
# Valid players are ones that are active and not spectating.
for:
Player : Players
Player.IsActive[]
not Player.IsSpectator[]
do:
PlayerPrzy tym wszystkim projekt wykorzystuje urządzenie starting_game_sequence, aby skonfigurować lobby z tablicą rankingową w pierwszej rundzie, a następnie przypisać graczy do pozycji startowych i pojazdów przed rozpoczęciem wyścigu.
# This file handles the logic for the pregame lobby and the cinematics that play at the beginning of a race.
# It controls the length of the starting lineup based on the number of players, and plays an intro for each
# player by displaying their stats.
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/FortPlayerUtilities }
using { /Verse.org/Native }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
Początkowa sekwencja filmowa ze statystykami graczy
Oryginalna wersja szablonu trybu kreatywnego Projektowanie wyścigu szosowego wykorzystywała urządzenie aktywatora impulsu do stworzenia wprowadzenia do wyścigu na miejsca – gotowi – start. Aktywator impulsu odtwarzał sekwencję zdarzeń w zadanym okresie czasu, wyzwalając aktywatory wyświetlające tekst i włączające światła na linii startu.
W skonwertowanym szablonie urządzenie aktywatora impulsu zostało zastąpione urządzeniem sekwencji filmowej UEFN, aby uzyskać wspaniałą sekwencję filmową na otwarcie. Korzystając z Sequencera, możesz dodać różne kamery, elementy interfejsu (HUD) i dynamiczny widok prezentacji, który dostosowuje się w zależności od liczby aktywnych graczy. Podobnie do wcześniejszej konfiguracji urządzenia aktywatora impulsu, sekwencja poziomu aktywuje urządzenia w ważnych momentach, pozwalając określić, kiedy wyświetlić wynik następnego gracza lub kiedy przejść do intro.
Konkretnie sekwencja poziomu aktywuje urządzenie aktywatora o nazwie StartPlayerIntroEvent za każdym razem, gdy rozpoczyna się intro gracza, i aktywuje urządzenie aktywatora o nazwie EndPlayerIntroEvent za każdym razem, gdy kończy się intro gracza. Kod Verse wykorzystuje te informacje, aby określić, ile intro graczy zostało już wyświetlonych, i zatrzymuje odtwarzanie sekwencji filmowej, jeśli liczba jest taka sama jak liczba graczy w grze. Jeśli filmik zakończy się jako pierwszy, anuluje również oczekiwanie na intro gracza, ponieważ jest w wyrażeniu race.
Kod Verse wywołuje WaitForPlayerIntro() dla każdego gracza, co rozpoczyna pętlę dla każdego gracza, i czeka, aż urządzenie aktywatora StartPlayerIntroEvent aktywuje się tyle razy, ile wynosi kolejność pozycji początkowej gracza, aby wiedzieć, kiedy wyświetlić statystyki gracza w interfejsie. Każda z tych pętli WaitForPlayerIntro() jest wywoływana w funkcji ArraySync(), która wykorzystuje algorytm współbieżności "dziel i zwyciężaj" do synchronizacji wielu funkcji asynchronicznych i elementów tablicy przy użyciu wyrażenia `sync`.
# A Verse-authored creative device that can be placed in a level
starting_game_sequence := class(creative_device):
# The cinematic that intros the players and their stats.
@editable
StartingLineupCinematic:cinematic_sequence_device = cinematic_sequence_device{}
# The cinematic that we cut to after the lineup and before the race starts.
@editable
RaceStartCinematic:cinematic_sequence_device = cinematic_sequence_device{}
Ten projekt używa urządzenia okna dialogowego do projektowania widżetów w edytorze widżetów i zamiany informacji za pomocą Verse. Odbywa się to poprzez ustawienie tekstu na przyciskach w urządzeniu okna dialogowego.
# Updates the Popup UI to display the lifetime stats of the given player during the
# race starting sequence.
UpdatePopupUI<public>(Player:agent, PopupDialogUI:popup_dialog_device):void=
if:
CurrentPlayerStats := GetPlayerStats[Player]
then:
PopupDialogUI.SetButtonText(PlayerText(Player), 0)
PopupDialogUI.SetButtonText(PointsText(CurrentPlayerStats.Points), 1)
PopupDialogUI.SetButtonText(PodiumsText(CurrentPlayerStats.Podiums), 2)
BestLapText:message = if(IsValidBestLapTime[CurrentPlayerStats.BestLapTime]):
Projekt poziomu
W tej aktualizacji użyliśmy trybu krajobrazu do stworzenia toru terenowego. Zaoszczędziliśmy pamięć, wykorzystując mniej zasobów, a góry otaczające tor mają teraz większą głębię. Wykorzystaliśmy również wolumen wody i wodospad, aby stworzyć nowy rodzaj terenu i przyciągnąć wzrok do następnej części toru wyścigowego.
Dotychczasowy cykl dobowy z oryginalnego projektu został zastąpiony zaawansowanym oświetleniem z Rozdziału 4 Fortnite. Ten nowy cykl umożliwił nam użycie Lumen, tworząc bardziej miękkie cienie i realistyczne globalne oświetlenie.
Czy wiesz, że w oryginalnym szablonie toru wyścigowego znajduje się ponad 120 barier? Bariery służyły do utrzymania graczy na torze i zapewnienia, że samochody nigdy nie wyjadą poza jego granice. W aktualizacji zobaczysz, że bariery są używane tylko do utrzymywania graczy na swoich miejscach przed rozpoczęciem wyścigu, a nie na całym torze. Punkty kontrolne wyścigu, znajdźki i niektóre elementy otoczenia zostały wykorzystane, aby zachęcić graczy do pozostania na torze:
Monety za dopalacz: Dodając platformę zwiększającą prędkość pod ostatnią monetą w każdej serii, zachęcisz graczy do trzymania się toru, aby uzyskać jak najbardziej efektywny czas wyścigu. Monety respawnują się co okrążenie, dając możliwość ponownego ich zebrania, jeśli gracze przegapią je za pierwszym razem.
Projekt wizualny utrzymujący graczy na torze: W wielu miejscach toru zastosowano krótkie, białe bariery, aby podkreślić zamierzony przebieg toru. Droga została zaprojektowana tak, aby była wystarczająco szeroka dla kilku samochodów obok siebie. Dodatkowe dekoracje i rekwizyty, takie jak drzewa, kampery i inne konstrukcje, zostały umieszczone w taki sposób, aby gracz mógł poruszać się komfortowo bez utknięcia, ale aby zniechęcić go do wybierania niezamierzonych ścieżek.
Skróty i hopki: Pierwotna mapa była prostą ósemką, ale podczas testów okazało się, że gracze uwielbiają używać hopek do skracania sobie drogi. W nowym projekcie dodano kilka skrótów i hopek, aby umożliwić graczom wybór sposobu, w jaki chcą ukończyć mapę.
Celowo rozmieszczone punkty kontrolne to ostateczny sposób na wymaganie od graczy podążania po torze, ponieważ przejście przez każdy z nich jest niezbędne do ukończenia wyścigu.