Il modello Gara a circuito con persistenza Verse è il modello creativo Progettazione di una gara a circuito convertito in UEFN, con le seguenti funzionalità aggiunte al progetto:
Una classifica persistente locale nella lobby pre-partita che utilizza la persistenza di Verse e viene visualizzata solo nel primo round.
Sistema che assegna i giocatori alle auto alla linea di partenza in base al loro ordine finale in un round precedente, utilizzando la persistenza Verse.
Uno schieramento di partenza che visualizza le statistiche di ogni giocatore utilizzando una cinematica e Verse.
...e molto altro ancora!
L'obiettivo del modello creativo di progettazione di una Gara a circuito era utilizzare asset di traccia della gara per costruire una modalità di gara unica con alcune funzionalità di qualità della vita. Con questo modello UEFN, è stato preso un approccio olistico per sostituire e migliorare molte funzionalità in tutta la mappa per sfruttare i vantaggi delle potenti funzionalità di UEFN.
Le seguenti sezioni esplorano questi aggiornamenti in maggiore dettaglio.
Aggiornamento della zona del tutorial
Puoi trovare la classifica nella zona del tutorial. Ogni volta che carichi il tuo primo round nella mappa, hai 30 secondi per dare un'occhiata alla classifica attuale ed esplorare la zona del tutorial.
Quest'area è realizzata per essere visivamente attraente per i giocatori alla ricerca di divertimento nelle gare e offrire ricchi dettagli su come costruire una mappa. La zona del tutorial è stata riprogettata dal modello creativo per offrire sensazioni più pulite e aperte e le luci del cielo sono state aggiunte per dare una luce Lumen naturale.
Quando carichi il modello in UEFN, puoi leggere la configurazione di ogni gruppo di dispositivi e gli script Verse per scoprire come è stato creato il modello e applicarli nelle tue esperienze.
La zona del tutorial è il luogo dove si trova la maggior parte dei nostri dispositivi per utilizzarli e comprendere la loro logica. Sono inclusi i dispositivi di conservazione, Accolade e analisi. I dispositivi Accolade forniscono XP solo quando termini un giro o una gara.
Puoi configurare i dispositivi di analisi per tenere sotto controllo vari punti dati per migliorare il tuo progetto negli aggiornamenti futuri. Questo modello tiene sotto controllo quanto spesso ogni punto di controllo viene completato e quanto spesso le persone raccolgono le monete d'argento durante la gara. Entrambi offrono dati su quanto è facile o difficile raggiungere un determinato punto di controllo o moneta. In base a questi dati, puoi regolare la posizione o il numero di questi oggetti nelle versioni future per avere l'intero gioco più fluido e offrire una migliore esperienza di gara.
Pulizia dell'Outliner
Dopo aver convertito il progetto a UEFN, l'Outliner è stato popolato con un lungo elenco di asset non organizzati.
Sebbene tutto funzionasse ancora, i nomi di veicoli, barriere e altri oggetti avevano numeri associati ed era difficile comprendere la struttura del progetto. Il processo di conversione ha aggiunto automaticamente questi numeri per garantire che ogni asset e dispositivo avesse un nome univoco.
Per gestirli, è stato aggiunto un sistema di file al progetto per organizzare tutti gli oggetti in base a posizione e funzionalità. Sebbene l'organizzazione richieda tempo, questo sistema permette di spostare o eliminare i gruppi di oggetti o intere aree in modo molto più efficiente che in Fortnite Creativo.
Classifica locale persistente
A causa della mancanza di dati persistenti nella mappa creativa originale, non è stato possibile tenere sotto controllo i vincitori della gara precedente e le statistiche dei giocatori. Nella mappa aggiornata del modelli UEFN, utilizzare Verse e persistenza di Verse significa che possiamo memorizzare i dati dei giocatori su più sessioni di gioco per monitorare le statistiche lifetime dei giocatori e creare classifiche locali. Puoi accedere solo ai dati dei giocatori che fanno parte della sessione attuale, quindi la classifica corrisponde solo alle statistiche dei giocatori che stanno giocando al momento.
Abbiamo deciso "podio" e "tempo sul giro" come statistiche persistenti più importanti da tenere sotto controllo per ogni giocatore. I giocatori ottengono un podio solo quando si piazzano nelle prime 3 posizioni, mentre il miglior tempo sul giro tiene sotto controllo i piloti più veloci. Abbiamo anche aggiunti una statistica addizionale chiamata "punti". Ai giocatori vengono assegnati punti in base alla posizione durante la gara, quindi i giocatori che gareggiano molto ma che non si posizionano bene possono comunque guadagnare molti punti. Con queste statistiche, abbiamo trovato un modo per premiare i più resistenti, i più veloci e i più dediti piloti allo stesso tempo.
Il modello convertito utilizza una lobby pre-partita con classifiche locali che mettono in mostra le statistiche lifetime di ogni giocatore. Queste statistiche sono ordinate in modo che i giocatori con più punti lifetime vengano visualizzati in cima e i primi tre vengono evidenziati per mettere in evidenza le loro abilità. Queste statistiche vengono visualizzate anche nell'HUD durante la cinematica dello schieramento di partenza per permettere ai giocatori di analizzare gli avversari e ricordarsi a chi devono fare attenzione durante la gara.
Per scoprire di più su come creare una classifica persistente locale, dai un'occhiata a Crea la tua classifica in gioco.
Ordine dei piloti sulla linea di partenza
Il modello convertito sostituisce l'ordine casuale dei piloti sulla linea di partenza dal progetto originale a un ordine basato sulle loro prestazioni nel round precedente. Ciò spinge i giocatori a terminare rapidamente la gara anche quando non sono in prima posizione.
Per il primo round, i piloti sono posizionati in ordine casuale; dopo il primo round, vengono ordinati in base alla posizione finale del round precedente. Queste informazioni devono essere memorizzate tra i round ma non vengono conservate dopo il termine della partita. Puoi utilizzarle per determinare l'ordine di partenza ordinando i giocatori in base all'ordine finale precedente. Per scoprire come memorizzare le informazioni sui round e ordinare i dati, dai un'occhiata ai seguenti tutorial:
# 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)
Quando assegni i giocatori ai veicoli e li configuri sulla linea di partenza, verifichi che i giocatori siano attivi e partecipino alla gara. Puoi creare una funzione chiamata GetAllValidPlayers() che controlla tutti i giocatori e restituisce quelli ancora attivi (che non hanno ancora lasciato il gioco) e non sono spettatori (che gareggeranno).
# 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:
PlayerCon tutto questo, il progetto utilizza il dispositivo `starting_game_sequence` per impostare la lobby della classifica al primo round, quindi assegnare ai giocatori le posizioni di partenza e i veicoli prima di iniziare la gara.
# 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 }
Linea di partenza cinematica con statistiche giocatore
La versione originale del modello Progettare una gara a circuito in modalità creativa utilizzava il dispositivo Attivatore a impulsi per orchestrare l'introduzione ready-set-go alla gara. Il Trigger a impulsi ha riprodotto una sequenza di eventi in un determinato periodo di tempo attivando i trigger per visualizzare il testo e abilitare le luci sulla linea di partenza.
Con il modello convertito, il dispositivo Attivatore a impulsi è stato sostituito dal dispositivo Sequenza cinematica di UEFN per ottenere una cinematica di grande apertura. Utilizzando il Sequenziatore, puoi aggiungere varie telecamere, elementi dell'Heads Up Display (HUD) e una visualizzazione dinamica dello schieramento che si regola in base alla quantità di giocatori attivi. In modo simile alla configurazione precedente del dispositivo Trigger a impulsi, la sequenza livelli attiva i dispositivi in momenti importanti, permettendoti di determinare quando visualizzare il punteggio del giocatore successivo o quando interrompere la presentazione.
In particolare, la Sequenza livelli attiva il dispositivo Trigger denominato StartPlayerIntroEvent ogni volta che inizia un'introduzione del giocatore e attiva il dispositivo Trigger denominato EndPlayerIntroEvent ogni volta che termina un'introduzione del giocatore. Il codice Verse utilizza queste informazioni per determinare quante presentazioni dei giocatori sono già state mostrate e interrompe la riproduzione della cinematica se è uguale al numero di giocatori nella partita. Se il filmato termina per primo, annullerà anche l'attesa delle introduzioni dei giocatori perché è nell'espressione race.
Il codice Verse chiama WaitForPlayerIntro() per ogni giocatore, che avvia un loop per ogni giocatore e attende che il dispositivo attivatore StartPlayerIntroEvent si attivi tante volte quanto l'ordine della posizione di partenza del giocatore per sapere quando visualizzare le statistiche del giocatore nell'HUD. Ognuno di questi loop WaitForPlayerIntro() viene chiamato nella funzione ArraySync() , che utilizza un algoritmo di concorrenza divide et impera per sincronizzare più funzioni asincrone ed elementi dell'array.
# 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{}
Il progetto utilizza un dispositivo Finestra di dialogo a comparsa per progettare i widget nell'Editor widget e scambiare le informazioni utilizzando Verse. Viene eseguito impostando il testo sui pulsanti nel dispositivo di dialogo popup.
# 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]):
Progettazione dei livelli
In questo aggiornamento, abbiamo utilizzato la modalità Paesaggio per creare una pista off-road. Abbiamo risparmiato memoria utilizzando meno asset e le montagne intorno alla pista ora hanno più profondità. Abbiamo anche utilizzato volumi d'acqua e la cascata per creare un nuovo tipo di terreno e far puntare lo sguardo verso la parte successiva del circuito.
Abbiamo eseguito un upgrade dal precedente ciclo giorno/notte del nostro progetto originale all'illuminazione avanzata di Fortnite Capitolo 4. Questo nuovo ciclo ci ha permesso di utilizzare Lumen, creando ombre più morbide e un'illuminazione globale realistica.
Sapevi che ci sono oltre 120 barriere nel modello originale del circuito? Le barriere sono state utilizzate per tenere i giocatori in pista e garantire che le auto non vadano mai fuori dai limiti. Nell'aggiornamento, vedrai che le barriere vengono utilizzate solo per tenere i giocatori nella loro posizione prima dell'inizio della gara e non nel resto della pista. Punti di controllo della gara, collezionabili e alcuni elementi dell'ambiente sono stati utilizzati per spingere i giocatori a rimanere in pista:
Monete per il potenziamento: aggiungendo una pedana per il potenziamento della velocità sotto l'ultima moneta di ogni serie, i giocatori sono incoraggiati a rimanere in pista per ottenere il tempo di gara più efficiente. Le monete vengono generate di nuovo a ogni giro e possono essere raccolte di nuovo se i giocatori non le hanno prese la prima volta.
Design visivo per mantenere i giocatori in pista: brevi barriere bianche sono state utilizzate in molti punti della pista per enfatizzare il flusso previsto della pista. La strada è stata progettata per essere abbastanza grande per varie auto affiancate. Le decorazioni e gli oggetti scenografici addizionali come alberi, RV e altri elementi sono stati posizionati in modo che l'auto di un giocatore possa muoversi comodamente senza rimanere incastrata e allo stesso tempo scoraggiare i percorsi non previsti.
Scorciatoie e salti: la mappa originale era un semplice 8, ma durante il playtest abbiamo scoperto che i giocatori adoravano usare i salti per prendere scorciatoie. Nel nuovo design, sono stati aggiunti alcuni salti e alcune scorciatoie per permettere ai giocatori di scegliere il modo in cui preferiscono completare la mappa.
Alla fine, i punti di controllo della gara posizionati intenzionalmente sono il modo finale per obbligare i giocatori a seguire la pista, dato che sono necessari per avanzare nella gara.