Mit der erstellten Karte ist es an der Zeit, mit dem Bauen der Skripte zu beginnen. Der Rest dieses Kurses wird sich hauptsächlich auf das Skripten aller verschiedenen Elemente des Spielzyklus konzentrieren.
Die Skripte einrichten
Das Battle Royale verwendet eine Kombination von Modul-Skripts und normalen Skripts. Hier sind die Skripte und ihre Funktionen.
SpielManager | Script. Runs Funktionen vom Match Manager mit Variablen aus den Spiel Einstellungen |
MatchManager | Modul-Script. Führt Funktionen aus, wie das Senden von Spielern in eine Arena oder das Verfolgen der Zeit in einem übereinstimmen. |
Spieleinstellungen | Module-Script. Speichert übliche Variablen, die von anderen Skripts verwendet werden. |
Spieleinstellungen-Skrip
Erstellen Sie ein Modul-Skript namens GameSettings , um Variablen, die von anderen Skripts verwendet werden, wie Match und Intermission Dauer, zu speichern. Diese Variablen werden später vom GameManager-Skript verwendet.
In ServerStorage erstellen Sie einen Ordner namens ModuleScripts. In diesem Ordner erstellen Sie ein neues Modul-Skript namens GameSettings.
Öffnen Sie GameSettings und benennen Sie die Modul-Tabelle, um den Namen des Skript, das. PL: die Skriptszu entsprechen.
local GameSettings = {}return GameSettingsIn der Modul-Tabelle fügen Sie Variablen für die folgenden Anwendungen hinzu. Nehmen Sie Ihren besten Schätz für jeden Wert, Sie können ihn jederzeit ändern, wenn Sie testen.
- Dauer der Pause - Sekunden warten Spieler vor einem übereinstimmen.
- Spieldauer - Länge eines Spiels in Sekunden.
- Minimum-Spieler - Kleine Anzahl von Spielern, die zum startenbenötigt werden.
- Übergangszeit - Zeit vor und nach einem Match in Sekunden. Macht den Übergang zwischen den Teilen des Spiels weniger plötzlich.
local GameSettings = {}-- Spiel variablenGameSettings.intermissionDuration = 5GameSettings.matchDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings
MatchManager-Skript
Das zweite Skript, das mit GameManager verbunden ist, ist MatchManager. Dieses Skript verwaltet Aufgaben wie das Starten des Timers oder das Wiedersetzen von Spielern, sobald das Spiel beendet ist.
In MatchManager ist eine Funktion namens prepareGame() startet das Spiel, indem die Spieler in das übereinstimmenübergehen.
In ServerStorage > ModuleScripts > fügen Sie ein Modul-Skript namens MatchManager hinzu. Neuen Sie den Modul-Tab.
local MatchManager = {}return MatchManagerFügen Sie eine neue Modulfunktion hinzu, die prepareGame() heißt. Inklusive eines druckenden Statements, um das Skript später zu testen.
local MatchManager = {}function MatchManager.prepareGame()print("Game starting!")endreturn MatchManager
Codierung des Spiel循ops
Der Hauptspiel-Loop wird im GameManager-Skript mit den Variablen, die gerade erstellt wurden, kodiert. Denken Sie daran, es gibt drei Phasen im Spiel-Loop: Pause, Wettbewerb und Reinigung und zurücksetzen.
GameManager-Skript
Dies ist ein normales Skript, das. PL: die Skripts, also stellen Sie es in ServerScriptService ein, nicht in die Modul-Skripts-Ordner. Die tatsächliche Spiel-Loop wird in einer Weile wahrer Do-Loop sein.
In ServerScriptService erstellen Sie ein neues Skript namens GameManager.
Füge eine Variable für den Dienst "ServerStorage" hinzu, in dem die Modul-Skripte sind. Dann füge eine Variable für den Dienst "Players" hinzu, die für die Überprüfung der Anzahl der Spieler während der Pausen erforderlich sein wird.
-- Dienstelocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")Um die zuvor erstellten Module zu verwenden:
- Setzen Sie eine Variable namens moduleScripts in den Speicherort der ModuleScripts-Ordner.
- Fügen Sie Variablen mit dem Namen matchManager und gameSettings hinzu. Setzen Sie jede Variable so ein, dass ihr Skript, das. PL: die Skriptserforderlich ist.
-- Dienstelocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Modul-Scriptslocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))Nach den Variablen fügen Sie einen while true do Loop hinzu. Alle Phasen des Spiel循ops gehen inнут, um indefinitely wiederholt zu werden.
-- Modul-Scriptslocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Hauptspiel-Loopwhile true doend
Codierung der Pause
Während der Spiel-Loop unbestimmt läuft, sollte die Pause die Loop stoppen und nur fortfahren, wenn genug Spieler für ein übereinstimmenvorhanden sind. Um diesen Pause zu kodieren, fügen Sie einen verschachtelten wiederholten Loop für die Pause in den Haupt-Loop ein. Dieser verschachtelte Loop wird wiederholt, bis genug Spieler vorhanden sind, um das Haupt-Loop auszuführen. Sobald genug Spieler vorhanden sind, wird es ausgeführt und das Spieler in ein übereinstimmenübergeht.
Mit einem peat-Loop , der Code in dem Loop ausgeführt wird, wird der Code mindestens einmal ausgeführt. Im Gegensatz zu einem while-Loop überprüft es nicht seine Bedingung, bis der Loop beendet ist. Dies gewährleistet, dass Spieler immer zur Lobby gehen, bevor ein übereinstimmenbeginnt.
In der while true do Loop, tippe repeat und drücke Enter, um mit dem Schlüsselwort 1> until1> automatisch abzuschließen.
while true dorepeatuntilendÜberprüfen Sie, ob die aktuelle Anzahl von Spielern (#Players:GetPlayers()) größer oder gleich ist der minimumPlayers Variable, die vor dem SpielSettings-Modul erstellt wurde.
while true dorepeatuntil #Players:GetPlayers() >= gameSettings.minimumPlayersendIn der Wiederholungs-Schleife fügen Sie eine druckende Anweisung hinzu, die sagt, dass die Pause beginnt. Verwenden Sie task.wait() , um für die Pause zu pausieren, verwendendo intermissionDuration aus GameSettings.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersendSpielen Sie den Test und überprüfen Sie, dass die Druckanzeige "Starting intermission" mindestens zweimal angezeigt wird. Wenn Sie das Nachrichten-Message zweimal sehen, beweist die Wiederholungslife, dass der Repeat-Loop nicht genug Spieler gefunden hat und erneut ausgeführt wurde. Sie müssen die Länge der Pause warten, bevor Sie das Nachrichten-Message erneut sehen.
Troubleshooting-Tipps
An diesem Punkt, wenn Sie nicht wie beabsichtigt zu spawnen, versuchen Sie einen der folgenden unten.
- task.wait() sollte sich im wiederholungs循环 befinden. Ohne den Warteschlangen wird das Skript zu oft in einer Sekunde ausgeführt, überlastet Roblox Studio und verursacht einen Fehler.
- Im Modul "Spieleinstellungen" sollte die Variable intermissionDuration größer als 1 sein. Wenn sie zu niedrig ist, kann das Skript zu oft wiederholt werden, was langsame Probleme verursacht.
Pause beenden
Sobald genug Spieler sind, haben Sie sie eine kurze Übergangszeit warten. Dann senden Sie sie in das Spiel, indem Sie die prepareGame() Funktion im MatchManager aufrufen. Denken Sie daran, dass Funktion nur eine Zeile druckt, aber Sie fügen später mehr Code hinzu.
Am Ende des wiederholten Loops fügen Sie eine druckende Anweisung hinzu, die sagt, dass die Pause vorbei ist, um Ihren Codeszu testen. Dann folgen Sie ihm mit einer task.wait() , die die transitionTime Variable von GameSettings verwendet.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)endNach dem Warten rufen Sie den prepareGame() aus dem MatchManager-Modul. Wenn der Code ausgeführt wird, wird dies einfach Text in das Ausgabefenster drucken. Warten Sie, bis der nächste Abschnitt, um diesen Codeszu testen.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
Multiplayer-Spiele testen
Im Moment muss der Code prepareGame() ausgeführt werden, um ihn zu wiederholen. Aber, um das zu tun, muss es mehr als einen Spieler:ingeben. Dies bedeutet, wenn Sie die Spieltest-Funktion verwenden, dass die Funktion niemals ausgeführt wird, weil Sie der einzige Spieler im Spiel sind (außer Ihren minimalen Spielern). Um dies zu testen, müssen Sie ein mehrspieliges Spiel simulieren.
Beginnen eines lokalen Servers
Um Code, der mehr als einen Spieler:inerfordert, auf mehreren Spielen zu testen, erstellen Sie einen lokalen Server. Während veröffentlichte Spiele normalerweise auf Roblox-Servern sind, simuliert ein lokaler Server ein mehrspieliges Spiel auf Ihrem Computer mit simulierten Spielern.
Um einen lokalen Server zu starten, in der Test- -Registerkarte > Clients and Servers -Sektion > setzen Sie das Spieler-Dropdown auf die Anzahl der Spieler in GameSettings's Variable minimumPlayers. Diese Lektion verwendet 2 Spieler.
Klicken Sie auf Starten, um den Server zu beginnen.
Warte einige Sekunden, bis der Server eingerichtet ist. Mehrere Fenster werden in deinem ursprünglichen Studio-Fenster geöffnet. Du musst möglicherweise Zugriff auf Roblox Studio von Firewalls oder anderen Online-Sicherheits-Softwareen erlauben.
Troubleshooting-Tipps
An diesem Punkt können Sie die Testserver nicht sehen, versuchen Sie einen der folgenden.
- Wenn Sie irgendwelche Probleme mit dem Serverstart haben, überprüfen Sie doppelt den Artikel Firewall and Router Issues.
- Setzen Sie die Anzahl der Spieler auf eine kleine Anzahl, wie 2 oder 3.
- Wenn das Problem nicht gelöst wird, versuchen Sie, Studio neu zu starten oder Ihren Computer neu zu starten.
Testen im lokalen Server
Sie sehen mehrere Fenster, wenn der Server startet. Jedes davon repräsentiert einen anderen Teil der Server/Client-Beziehung.
- Server (grüne Grenze) läuft das Spiel.
- Client (blaue Kanten) simuliert die Erlebniseines Spieler:in.
Mit dem Server up, können Sie überprüfen, ob der Code funktioniert hat.
Finden Sie das Server-Fenster mit der grünen Kante. Überprüfen Sie die druckenden Anweisungen, die vom Skript, das. PL: die Skriptsausgerufen werden. Da es einen wiederholten Loop gibt, werden Sie die gleichen druckenden Anweisungen sehen.
Sobald Sie das Testen abgeschlossen haben, in jedem Fenster, schließen Sie den Server mit dem Cleanup-Button. Dies schließt alle Server- und Client-Fenster und führt Sie zurück zu Ihrem normalen Studio-Fenster.
Troubleshooting-Tipps
Wenn die beabsichtigten Anzeigestatistiken nicht angezeigt wurden, versuchen Sie es mit einer der folgenden Optionen.
- Überprüfen Sie, dass Funktionen wie prepareGame() in der while true do loop sind.
- Wenn die Ausgabe von MatchManager nicht funktionierte, überprüfen Sie einige häufige Fehler mit Modul-Skripts, wie z. B. sicherzustellen, dass das MatchManager-Skript in GameManager erforderlich ist, oder dass prepareGame() an die Tabelle dieses Moduls angehängt wird.
Abgeschlossene Skripte
Dies sind abgeschlossene Skripte, um deine Arbeit zu überprüfen.
GameManager-Skript
-- Dienstelocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Modul-Scriptslocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Hauptspiel-Loopwhile true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
MatchManager-Skript
local MatchManager = {}
function MatchManager.prepareGame()
print("Game starting!")
end
return MatchManager
Spieleinstellungen-Skrip
local GameSettings = {}-- Spiel variablenGameSettings.intermissionDuration = 5GameSettings.roundDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings