In früheren Tutorials hast du eine Vielzahl von Erfahrungsfunktionen einschließlich Verblassende Plattformen und tödliche Lava gemacht. Dieses Tutorial verbindet diese zusammen in einem spielbaren Erlebnis, in dem Benutzer sehen, wer am längsten am Leben bleiben kann. Jede Sekunde, die sie am Leben bleiben, wird ein Punkt zu ihrem Score hinzugefügt.
Einstellungen
Zuerst musst du die Szene für dein Erlebnis einrichten. Duplizieren Sie die Verblasende Plattformen, die du im vorherigen Tutorial gemacht hast, und lass Benutzer konkurrieren, um auf der Plattform so lange wie möglich zu bleiben.
Sie können auch tödliche Lava verwenden, um Benutzer zu töten, wenn sie von den Plattformen fallen, oder einfach zu lassen, dass sie zu ihrem Untergang fallen. Stellen Sie sicher, dass Sie ein SpawnLocation irgendwo platzieren, auf dem Benutzer auf die Plattformen springen können, um mit dem Spielen zu beginnen.
Spieler Punkte
Roblox hat eine integrierte Bestenliste für die Anzeige von Benutzerstatistiken. Wenn Sie Spielerpunkte durch die Bestenliste setzen, erscheinen sie auf der rechten Seite des Bildschirms im Erlebnis.
Du wirst in späteren Tutorials mehr benutzerdefinierte Möglichkeiten zum Anzeigen von Informationen erfahren, aber die Rangliste ist der einfachste Weg, um ein sichtbares Punktesystem in Roblox zu erstellen.
Es ist am besten, Skripte, die Erfahrungsstatus einrichten, in ServerScriptService zu legen, da sie automatisch ausgeführt werden, wenn die Erfahrung beginnt. In ServerScriptService erstellen Sie ein Skript namens SetupPoints .
Hören für Spieler
In Roblox ist ein Dienst ein Objekt, das eine Reihe nützlicher Funktionen ausführt. Der Players hat ein Ereignis namens PlayerAdded, das Sie verwenden können, um Punkte für jeden Benutzer, der sich dem Erlebnis anschließt, zu erstellen.
Sie können auf Dienste mit der GetService Funktion in dem game Objekt zugreifen. game ist eine Variable, die von überall aus zugänglich ist, die alles in Ihrem Erlebnis enthält.
Erstellen Sie eine Variable für den Players-Dienst mit game:GetService("Players").
Erstellen Sie eine Funktion namens onPlayerAdded mit einem Parameter für den eingehenden Spieler:in.
Verbinden Sie die onPlayerAdded Funktion mit dem Ereignis PlayerAdded.
local Players = game:GetService("Players")local function onPlayerAdded(player)endPlayers.PlayerAdded:Connect(onPlayerAdded)
Erstellen Sie einen Statistikordner
Um die Punkte eines Benutzers in der Bestenlisteanzuzeigen, alles, was Sie tun müssen, ist, ein neues Folder in ihrem Player-Objekt namens "leaderstats" zu erstellen und ihre Punkte in ihn zu legen. Neue Objekte können über die Funktion 1> Datatype.Instance.new()1> innerhalb eines Skripts erstellt werden.
Erstellen Sie ein neues Folder -Objekt mit Instance.new("Folder") , das das Ergebnis in einer neuen Variable namens leaderstats speichert.
local function onPlayerAdded(player)local leaderstats = Instance.new("Folder")endSetzen Sie die Eigenschaft name von leaderstats auf "leaderstats".
Parent leaderstats zu player .
local Players = game:GetService("Players")local function onPlayerAdded(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = playerendPlayers.PlayerAdded:Connect(onPlayerAdded)
Die Punkte erstellen
Das Leaderboard-System liest alle Werte in der leaderstats-Ordner und zeigt an, was es findet.
Um einen Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Statistik-Stat
- Verwenden Sie eine Variable namens points, um ein neues IntValue -Objekt mit Instance.new() zu erstellen.
- Set the Name to "Points" .
- Set the Value to 0 ; this is what the leaderboard will initially display for the Spieler:in.
- Eltern das points Objekt zu der leaderstats Ordner.
local Players = game:GetService("Players")
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
end
Players.PlayerAdded:Connect(onPlayerAdded)
Testen Sie Ihr Erlebnis und Sie sollten die Rangliste oben rechts mit den Namen Ihrer Benutzer und einem Punkte-Score neben ihnen sehen.
Zeit Counting
Jeder Benutzer sollte für jede Sekunde, in der er lebt, einen Punkt verdienen. Ein while -Loop und die Library.task.wait() -Funktion können verwendet werden, um den Wert der Punkte jede Sekunde zu aktualisieren.
- Am Ende des Skripts erstellen Sie eine while Loop mit true als Bedingung.
- Im Loop, task.wait() für 1 Sekunde.
Players.PlayerAdded:Connect(onPlayerAdded)while true dotask.wait(1)end
Spielerliste
Um Code für jeden Benutzer in der Erlebnisauszuführen, musst du durch die Matrix der zurückgegebenen Benutzer durch die Funktion GetPlayersiterieren.
Ein Array ist eine Liste von Elementen, die in Ordnung gespeichert sind. Jedes Element kann über seine Index-Position aufgerufen werden, beginnend mit 1. Sie können die Länge eines Arrays durch das Präfixieren mit # erhalten.
- Lagere das Ergebnis von Players:GetPlayers() in einer playerList Variable.
- Erstellen Sie ein für Loop mit einem Startwert von 1 und einem Endwert von #playerList, so dass Sie einen Loop pro Spieler:inerhalten.
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList do-- Füge deine Logik hier für jeden Spieler in der SpielerList hinzuendend
Punkte vergeben
Um jedem Benutzer in der for Loop einen Punkt zuzuweisen, musst du den Benutzer aus der Matrix herausziehen und 1 zum Punkten -Objekt, das in ihrem leaderstats-Ordner gespeichert ist, hinzufügen.
Objekte, die in einem Array gespeichert sind, werden mit quadratischen Klammern - zum Instanzkann der erste Element in der playerList -Matrix mit playerList[1] aufgerufen werden. Wenn Sie in der for-Schleife 1> playerList[currentPlayer]1> mit jedem Iter der Schleife auf jeden Benutzer in der Liste bewegen, können Sie durch jede Iteration der Schleife jeden
- Speichere den Benutzer bei playerList[currentPlayer] in einer Variable namens player.
- Lagere das Objekt Punkte des Benutzers in einer Variable namens points.
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList dolocal player = playerList[currentPlayer]local points = player.leaderstats.Pointspoints.Value += 1endend
Testen Sie Ihr Erlebnis und Sie sollten finden, dass die Rangliste Ihres Spieler:injede Sekunde um 1 Counting score anzeigt.
Charaktere hören
Das Ziel des Erlebnisses ist es zu sehen, wer am längsten am Leben bleiben kann, so dass Benutzer, die sterben, ihre Punkte auf 0 zurücksetzen müssen.
Du musst das Charakter-Modell für den Benutzer erhalten, um zu erkennen, wenn sie gestorben sind. Dieses Modell wird nur dem Erlebnis nach dem Laden des Player -Objekts hinzugefügt und du kannst das 2> Class.Player.CharacterAdded
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
Obwohl du den Benutzer in der onCharacterAdded -Funktionsparameter enthalten hast, zeigt das tatsächliche CharacterAdded -Ereignis nur den Charakter, nicht den zugeordneten Benutzer. Um das player zu übergeben, verwende eine 1> anonyme Funktion1> für die Verbindungsverbindung.
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Resetten von Punkten
Wenn ein Benutzer stirbt, wird sein Humanoid automatisch ein Died -Ereignis ausgelöst. Sie können dieses Ereignis verwenden, um festzustellen, wann ihre Punkte zurückgesetzt werden müssen.
Der Humanoid wird in dem Charakter-Modell gefunden, aber die Inhalte dieses Modells werden nur zusammengebaut, wenn der Benutzer spawnet. Um Ihren Code sicher auf das Humanoid-Objekt zu warten, verwenden Sie die Funktion WaitForChild(). Sie können sie auf jedem übergeordneten Objekt aufrufen, indem Sie den Namen der Zeichenkette des Kindes angeben.
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
end
Die Funktion, die Sie zum Died-Ereignis verbinden müssen, ist sehr kurz und wird nur hier verwendet, sodass Sie eine anonyme Funktion erneut verwenden können.
- Verbinden Sie eine neue anonyme Funktion mit dem Ereignis gestorben des Humanoid.
- In der anonymen Funktion erstellen Sie eine Variable namens points für das Objekt Punkte des Spieler:in.
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
end)
end
Testen Sie dies aus und Sie sehen den Benutzer-Score zurücksetzen, wenn sie sterben.
Spieler überprüfen
Wenn Benutzer auch weiterhin Punkte verdienen, wenn sie tot sind, ist es kaum im Geiste des Erlebnisses, so dass der Code überprüfen muss, ob Benutzer lebend sind, bevor ein Punkt vergeben wird.
Du musst mit der Festlegung eines Attributs in der onPlayerAdded Funktion beginnen, die verwendet werden kann, um zu überprüfen, ob der Benutzer lebt. An diesem Punkt ist der Benutzer noch nicht lebendig und gespawnt, da sein Charaktermodell noch hinzugefügt werden muss.
Attributsionen ermöglichen es Ihnen, Objekte in Roblox mit Ihren eigenen Daten anzupassen. Ein Attribut besteht aus einem Namen und einem Wert. Sie können eines auf jedem Objekt mit der SetAttribute Funktion erstellen. Rufen Sie
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Sobald das Charaktermodell des Benutzers respawned ist, muss der Wert von IsAlive auf true geändert werden, damit der Benutzer wieder Punkte verdienen kann.
- In onCharacterAdded , setzen Sie das IsAlive -Attribut von player auf 1> wahr1> .
- In onCharacterDied setzen Sie das Attribut IsAlive von player auf 1> falsch1> .
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
Schließlich sollte IsAlive vor jedem Punkt in der while Loop am Ende des Skript, das. PL: die Skriptsüberprüft werden. Die Funktion while nimmt den Namen eines Attributs und gibt den Wert
while true dotask.wait(1)local playerList = Players:GetPlayers()for currentPlayer = 1, #playerList dolocal player = playerList[currentPlayer]if player:GetAttribute("IsAlive") thenlocal points = player.leaderstats.Pointspoints.Value += 1endendend
Testen Sie Ihr Erlebnis jetzt und Sie sollten finden, dass der Benutzer jeden Sekunde, wenn sie lebendig sind, Punkte verdient und bleiben bei 0, wenn sie nicht lebendig sind. Lassen Sie Ihre Freunde mit Ihnen spielen und sehen, wer die höchste Punktzahl erzielen kann.
Dies ist nur der starten: Sie können Ihr Erlebnis weiter verbessern für Ihre Benutzer. Hier sind einige Tipps:
- Platziere den Code für alle Plattformen in einem einzigen Skript, das. PL: die Skripts, so dass es viel einfacher ist, zu Update.
- Erstellen Sie einen Lobbybereich, in dem Benutzer auf die Erlebnisbereich warten, um gleichzeitig teleportiert zu werden.
- Verkünden Sie die Gewinner jeder Runde.
End-Code
local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for i = 1, #playerList do
local player = playerList[i]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end