Con la mappa creata, è il momento di iniziare a costruire gli script.Il resto di questo corso si concentrerà pesantemente sullo scripting di tutti gli elementi diversi del ciclo di gioco.
Configura gli script
La battaglia royale utilizzerà una combinazione di script di modulo e script normali. Ecco gli script e le loro funzioni.
GiocoManager | Script. Esegue le funzioni dal Match Manager utilizzando le variabili dalle Impostazioni di gioco |
Gestore della Partita | Script del modulo. Esegue funzioni come l'invio di giocatori in un'arena o il tracciamento del tempo in una Corrisponde. |
Impostazioni di gioco | Script del modulo. Memorizza le variabili comunemente utilizzate utilizzate da altri script. |
scriptdelle impostazioni di gioco
Crea uno script del modulo chiamato GameSettings per memorizzare le variabili utilizzate da altri script, come la durata della partita e dell'intervallo.Queste variabili verranno utilizzate dallo script GameManager in seguito.
In ServerStorage , crea una cartella chiamata ModuleScripts. In quella cartella, crea un nuovo script di modulo chiamato GameSettings.
Apri GameSettings e rinomina la tabella del modulo per corrispondere al nome dello script.
local GameSettings = {}return GameSettingsNella tabella del modulo, aggiungi le variabili per i seguenti usi. Prendi la tua migliore stima per ciascun valore, puoi sempre cambiarlo in seguito durante le prove.
- Durata dell'intervallo - Secondi i giocatori attendono prima di una Corrisponde.
- Durata della partita - Lunghezza di una partita in secondi.
- Minimo giocatori - Numero più piccolo di giocatori necessari per Iniziare, cominciare.
- Tempo di transizione - Tempo prima e dopo una partita in secondi. Rende la transizione tra le parti del ciclo di gioco meno improvvisa.
local GameSettings = {}-- Variabili di giocoGameSettings.intermissionDuration = 5GameSettings.matchDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings
scriptdi MatchManager
Il secondo script connesso al GameManager è il MatchManager.Questo script gestisce le attività come l'avvio del timer o il ripristino dei giocatori una volta terminata la partita.
All'interno di MatchManager c'è una funzione chiamata termina il gioco trasformando i giocatori nella Corrisponde.
In ServerStorage > ModuleScripts > aggiungi uno script del modulo con il nome MatchManager. Rinomina la tabella del modulo.
local MatchManager = {}return MatchManagerAggiungi una nuova funzione del modulo a MatchManager chiamata prepareGame(). Includi una dichiarazione di stampa per testare lo script in seguito.
local MatchManager = {}function MatchManager.prepareGame()print("Game starting!")endreturn MatchManager
Codifica il ciclo di gioco
Il ciclo di gioco principale verrà codificato nello script GameManager utilizzando le variabili appena create.Ricorda, ci sono tre fasi nel ciclo di gioco: intermissione, competizione e pulizia e ripristino.
scriptdi GameManager
Questo script è uno script del server normale, quindi mettilo nel ServerScriptService, piuttosto che nella cartella degli script del modulo.Il ciclo di gioco effettivo sarà in un ciclo while true.
In ServerScriptService, crea un nuovo script chiamato GameManager.
Aggiungi una variabile per il servizio "ServerStorage", dove sono presenti i ModuliScript.Quindi aggiungi una variabile per il servizio "Giocatori", che sarà necessaria per controllare il numero di giocatori durante le intermissioni.
-- Servizilocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")Per utilizzare i moduli creati in precedenza:
- Imposta una variabile di nome moduleScripts alla posizione della cartella ModuleScripts.
- Aggiungi le variabili denominate matchManager e gameSettings. Imposta ciascuna variabile a richiedere il rispettivo script.
-- Servizilocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Script del modulolocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))Dopo le variabili, aggiungi un ciclo while true do . Tutte le fasi del ciclo di gioco andranno all'interno per essere ripetute all'infinito.
-- Script del modulolocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Ciclo di gioco principalewhile true doend
Codifica l'intervallo
Mentre il ciclo di gioco si esegue indefinitamente, l'intervallo dovrebbe interrompere il ciclo e continuare solo quando ci sono abbastanza giocatori per una Corrisponde.Per codificare questa pausa, includi un ciclo di ripetizione anidato per l'intermissione nel ciclo while.Quel ciclo nidato si ripeterà fino a quando ci saranno abbastanza giocatori, interrompendo il ciclo principale.Una volta che ci sono abbastanza giocatori, esce e transita i giocatori in una Corrisponde.
Con un ciclo di ripetizione ripetuto , il codice nel ciclo verrà eseguito almeno una volta.A differenza di un ciclo while, non controlla la sua condizione fino alla fine del ciclo.Questo garantisce che i giocatori vadano sempre alla lobby prima di una Corrisponde.
Nel ciclo while true do , digita repeat e premi Enter per completare automaticamente con la parola chiave until .
while true dorepeatuntilendVerifica se il numero attuale di giocatori (#Players:GetPlayers()) è maggiore o uguale alla variabile minimumPlayers creata in precedenza nel modulo GameSettings.
while true dorepeatuntil #Players:GetPlayers() >= gameSettings.minimumPlayersendNel ciclo di ripetizione, aggiungi una dichiarazione di stampa che dice che l'interruzione sta iniziando.Usa task.wait() per pausare per l'intervallo usando intermissionDuration da GameSettings.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersendProva e controlla che la dichiarazione di stampa "Starting intermission" venga mostrata almeno due volte.Vedere il messaggio due volte dimostra che il ciclo di ripetizione non ha trovato abbastanza giocatori e ha funzionato di nuovo.Dovrai aspettare la durata dell'intervallo prima di vedere il messaggio una seconda volta.
Suggerimenti per la risoluzione dei problemi
A questo punto, se non stai spawnando come previsto, prova uno dei seguenti.
- task.wait() dovrebbe essere all'interno del ciclo di ripetizione.Senza l'attesa, lo script verrà eseguito troppe volte in un secondo, sovraccaricando Roblox Studio e causando un errore.
- Nel modulo Impostazioni di gioco, la variabile intermissionDuration dovrebbe essere maggiore di 1. Se è inferiore, lo script può ripetersi troppo spesso, causando problemi di rallentamento.
Fine dell'intervallo
Una volta che ci sono abbastanza giocatori, fai loro aspettare un breve periodo di transizione.Quindi, inviali nella partita chiamando la funzione prepareGame() in MatchManager.Ricorda, quella funzione stampa solo una linea, ma aggiungerai più codice più tardi.
Alla fine del ciclo di ripetizione, aggiungi una dichiarazione di stampa che dice che l'interruzione è finita per testare il tuo codice.Quindi, segui con un task.wait() utilizzando la variabile transitionTime di GameSetting.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)endDopo l'attesa, chiama il prepareGame() dal modulo MatchManager.Quando il codice viene eseguito, questo stamperà solo il testo nella finestra di output.Aspetta fino alla prossima sezione per testare questo codice.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
Testa i giochi multiplayer
Al momento, per far eseguire il codice prepareGame(), deve uscire dal ciclo di ripetizione.Ma, per farlo, ci deve essere più di un Giocatore.Questo significa che se utilizzi il pulsante playtest, la funzione non verrà mai eseguita perché sei l'unico giocatore nel gioco (a meno che i tuoi giocatori minimi non siano uno).Per testare questo, dovrai simulare un Giocomultiplayer.
Avvia un Serverlocale
Per testare il codice che richiede più di un Giocatore, crea un Serverlocale.Mentre i giochi pubblicati sono normalmente sui server di Roblox, un server locale simula un gioco multiplayer sul tuo computer con giocatori simulati.
Per avviare un server locale, nella scheda Test > Client e Server > imposta il menu a discesa del giocatore al numero di giocatori minimo nella variabile minPlayers di GameSetting.Questa lezione utilizza 2 giocatori.
Fai clic su Inizia per avviare il Server.
Attendi qualche secondo affinché il server si configuri.Saranno aperte più finestre oltre alla finestra originale di Studio.Potrebbe essere necessario consentire l'accesso a Roblox Studio da firewall o da altri software di sicurezza online.
Suggerimenti per la risoluzione dei problemi
A questo punto, non è possibile vedere i server di prova, prova uno dei seguenti.
- Se hai problemi con l'avvio del server, controlla di nuovo l'articolo Problemi con il firewall e il router.
- Imposta il numero di giocatori a una piccola quantità, come 2 o 3.
- Se il problema non si risolve, prova a riavviare Studio o riavviare il computer.
Test nel Serverlocale
Vedrai più finestre quando il server inizia. Ciascuna rappresenta una diversa parte della relazione server/client.
- Server (borderde verde) esegue il Gioco.
- Cliente (borderi blu) simula l'esperienza di un Giocatore.


Con il server in funzione, puoi controllare se il codice ha funzionato.
Trova la finestra Server con il bordo verde.Controlla la dichiarazione di stampa chiamata dallo script MatchManager.Poiché c'è un ciclo di ripetizione, vedrai le stesse dichiarazioni di stampa ripetute.
Una volta terminati i test, in qualsiasi finestra, chiudi il server con il pulsante Pulisci .Questo chiude tutte le finestre Server e Client e ti riporta alla tua normale finestra Studio.
Suggerimenti per la risoluzione dei problemi
A questo punto, se le dichiarazioni di stampa previste non sono apparse, prova una delle seguenti.
- Verifica che le funzioni come prepareGame() sono nell'ambito del ciclo while true.
- Se la stampa da MatchManager non ha funzionato, controlla alcuni problemi comuni di risoluzione con gli script del modulo, come assicurarsi che lo script di MatchManager sia richiesto in GameManager o che prepareGame() venga aggiunto alla tabella di quel modulo.
Script completati
Di seguito sono completati gli script per controllare due volte il tuo lavoro.
scriptdi GameManager
-- Servizilocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Script del modulolocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Ciclo di gioco principalewhile true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
scriptdi MatchManager
local MatchManager = {}
function MatchManager.prepareGame()
print("Game starting!")
end
return MatchManager
scriptdelle impostazioni di gioco
local GameSettings = {}-- Variabili di giocoGameSettings.intermissionDuration = 5GameSettings.roundDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings